Hallo Leute, ich habe gerade keine Lösung für Folgendes: # tv-movie lesen import urllib2, re my_url = urllib2.urlopen('http://www.tvmovie.de/rss/tvjetzt.xml') my_xml = my_url.read() my_url.close() # tv-movie xml parsen import xml.dom.minidom dom = xml.dom.minidom.parseString(my_xml) UnicodeEncodeError: 'ascii' codec can't encode character u'\xf6' in position 28: ordinal not in range(128) Beim lesen der Knoten (elem.getElementsByTagName()) etc. erhalte einen Fehler, weil die geparste Datei Umlaute enthält. Wie kann ich das verhindern? Kann mich mal jemand anschubbsen? Wie macht man das? Danke
On Monday 17 March 2008 14:40:10 Mathias Uebel wrote:
Hallo Leute,
ich habe gerade keine Lösung für Folgendes:
# tv-movie lesen import urllib2, re my_url = urllib2.urlopen('http://www.tvmovie.de/rss/tvjetzt.xml') my_xml = my_url.read() my_url.close()
# tv-movie xml parsen import xml.dom.minidom dom = xml.dom.minidom.parseString(my_xml)
UnicodeEncodeError: 'ascii' codec can't encode character u'\xf6' in position 28: ordinal not in range(128)
Beim lesen der Knoten (elem.getElementsByTagName()) etc. erhalte einen Fehler, weil die geparste Datei Umlaute enthält. Wie kann ich das verhindern? Kann mich mal jemand anschubbsen? Wie macht man das?
Funktioniert bei mir wie oben beschrieben - voellig ohne probleme. wo genau bitte kommt denn der Fehler? beim erzeugen des DOM? Oder in code den du uns nicht zeigst? Diez
Hallo Dietz, Diez B. Roggisch schrieb:
On Monday 17 March 2008 14:40:10 Mathias Uebel wrote:
Hallo Leute,
ich habe gerade keine Lösung für Folgendes:
# tv-movie lesen import urllib2, re my_url = urllib2.urlopen('http://www.tvmovie.de/rss/tvjetzt.xml') my_xml = my_url.read() my_url.close()
# tv-movie xml parsen import xml.dom.minidom dom = xml.dom.minidom.parseString(my_xml)
UnicodeEncodeError: 'ascii' codec can't encode character u'\xf6' in position 28: ordinal not in range(128)
[...] [...]
wo genau bitte kommt denn der Fehler? beim erzeugen des DOM? Oder in code den du uns nicht zeigst?
Ja, genau; in dem Teil, der jetzt kommt: def liesText(pretext, knoten): for k in knoten.childNodes: if k.nodeType == k.TEXT_NODE: print pretext, k.nodeValue.strip() def liesAdressen(knoten): for num, elem in enumerate(knoten.getElementsByTagName("item")): #print type(elem) print "%d. item:" % (num + 1) for my_title in elem.getElementsByTagName("title"): liesText("title:", my_title) for my_descrip in elem.getElementsByTagName("description"): liesText("description:", my_descrip) print def dokument(start): for elem in start.getElementsByTagName("channel"): liesAdressen(elem) dokument(dom) Ausgabe: 1. Item ... wenn der erste Umlaut erscheint 6. item: title: 17:00 RTL II - Immer wieder Jim description: Traceback (most recent call last): File "tv-now.py", line 54, in ? dokument(dom) File "tv-now.py", line 52, in dokument liesAdressen(elem) File "tv-now.py", line 47, in liesAdressen liesText("description:", my_descrip) File "tv-now.py", line 38, in liesText print pretext, k.nodeValue.strip() UnicodeEncodeError: 'ascii' codec can't encode character u'\xe4' in position 25: ordinal not in range(128)
Exit code: 1
Danke
Hallo Mathias, Mathias Uebel schrieb:
Diez B. Roggisch schrieb:
wo genau bitte kommt denn der Fehler? beim erzeugen des DOM? Oder in code den du uns nicht zeigst?
Ja, genau; in dem Teil, der jetzt kommt:
def liesText(pretext, knoten): for k in knoten.childNodes: if k.nodeType == k.TEXT_NODE: print pretext, k.nodeValue.strip()
In der letzen Zeile liegt der Fehler: XML-Parser liefern im Allgemeinen immer Unicode-Objekte zurück. Du versuchst, den Unicode-String (k.nodeValue) auf der Console auszugeben. Dabei wir der Unicode-String in das Encoding der Konsole umgewandelt. Welches das ist sagt dir sys.stdout.encoding. Du solltest den Unicode-String vor der Ausgabe manuell in das gewünschte Encoding umwandeln. Das ist generell nötig bei der Benutzung von Unicode-Objekten, i.e. print k.nodeValue.encode('<encoding>') Natürlich muss das Zielencoding die im Unicode verwendeten Zeichen auch unterstützen. Für europäische Sprachen ist das meistens entweder latin1 oder utf-8. Siehe auch: http://wiki.python.de/Unicode Chris
Hallo Chris, Christopher Arndt schrieb:
Hallo Mathias,
Mathias Uebel schrieb:
Diez B. Roggisch schrieb:
wo genau bitte kommt denn der Fehler? beim erzeugen des DOM? Oder in code den du uns nicht zeigst?
Ja, genau; in dem Teil, der jetzt kommt:
def liesText(pretext, knoten): for k in knoten.childNodes: if k.nodeType == k.TEXT_NODE: print pretext, k.nodeValue.strip()
In der letzen Zeile liegt der Fehler: XML-Parser liefern im Allgemeinen immer Unicode-Objekte zurück. Du versuchst, den Unicode-String (k.nodeValue) auf der Console auszugeben. Dabei wir der Unicode-String in das Encoding der Konsole umgewandelt. Welches das ist sagt dir sys.stdout.encoding.
Du solltest den Unicode-String vor der Ausgabe manuell in das gewünschte Encoding umwandeln. Das ist generell nötig bei der Benutzung von Unicode-Objekten, i.e.
print k.nodeValue.encode('<encoding>')
Natürlich muss das Zielencoding die im Unicode verwendeten Zeichen auch unterstützen. Für europäische Sprachen ist das meistens entweder latin1 oder utf-8.
Siehe auch:
Chris
Vielen Dank für Deine Unterstützung. Ja, das hat funktioniert. Mathias
wo genau bitte kommt denn der Fehler? beim erzeugen des DOM? Oder in code den du uns nicht zeigst?
Ja, genau; in dem Teil, der jetzt kommt:
Fuer die Zukunft: DAS ist der Teil, der wichtig ist. So habe ich meine Zeit damit verschwendet, ein voellig problemloses Stueck code laufen zu lassen und es zu betrachten. Diez
Hallo Dietz, Diez B. Roggisch schrieb:
wo genau bitte kommt denn der Fehler? beim erzeugen des DOM? Oder in code den du uns nicht zeigst?
Ja, genau; in dem Teil, der jetzt kommt:
Fuer die Zukunft: DAS ist der Teil, der wichtig ist. So habe ich meine Zeit damit verschwendet, ein voellig problemloses Stueck code laufen zu lassen und es zu betrachten.
Diez
Wie sollte ich das wissen? Ich nahm an, das beim Lesen der Url schon ein Fehler entsteht. Die Fehler-Anzeige deutete darauf hin. Aber dank Deiner Nachfrage konnte ich gleich den Fehler ermitteln. Wir sehen uns am 19.3. Dort werde ich mich persönlich bei Dir bedanken. M.
Mathias Uebel schrieb:
Diez B. Roggisch schrieb:
Fuer die Zukunft: DAS ist der Teil, der wichtig ist.
Wie sollte ich das wissen?
Der Traceback der Exception enthält in der letzten Zeile über der Fehlermeldung die genaue Zeil, in der der Fehler aufgetraten ist. Das ist generell bei Python-Exceptions so. Wo die *Ursache* liegt, ist dann eine andere Frage... Chris
participants (3)
-
Christopher Arndt
-
Diez B. Roggisch
-
Mathias Uebel