lxml und unicode
Verfasst: Freitag 26. März 2010, 18:39
hi,
ich stehe mal wieder auf dem Schlauch. Ich versuche momentan eine XML-Datei mit lxml einzulesen und mir Informationen zu den einzelnen Elementen ausgeben zu lassen. Die XML-Datei ist als utf-8 abgespeichert. Zumindest ist das in der Datei angegeben und sie sieht gut aus wenn ich sie mir als utf-8 in meinem Editor anzeigen lasse. Lese ich mir die Datei mit lxml ein und lasse sie mir den eingelesenen Baum folgendermaßen ausgeben:
bekomme ich den kompletten Baum schön kodiert ausgegeben.
Probleme bekomme ich erst wenn ich auf beispielsweise den Text eines Elements (sagt man das so?) zugreifen möchte der ein Unicode-Zeichen enthält.
bei einem Zugriff auf den Text eines Elements mit
bekomme ich einen UnicodeEncodeError ausgeworfen - in der Doku habe ich mittlerweile gefunden das ich bei Python Versionen unter 3.0 nur Unicode als Ausgabe erwarten kann wenn ich mir den ganzen Baum mit ``etree.tostring()`` ausgeben lasse. Ansonsten wird mit strings gearbeitet.
Wie kann ich mir die strings denn nu anzeigen lassen? Bisher habe ich immer versucht mit encode ``some_string.encode('utf-8')`` als bytestring darstellen zu lassen. Mitlerweile habe ich so viele Varianten ausprobiert - ich weiss gar nicht mehr wo ich anfangen soll.
Wenn mir jemand nen Tipp geben könnte wie ich weitermachen könnte wäre ich echt dankbar
Sebastian
ich stehe mal wieder auf dem Schlauch. Ich versuche momentan eine XML-Datei mit lxml einzulesen und mir Informationen zu den einzelnen Elementen ausgeben zu lassen. Die XML-Datei ist als utf-8 abgespeichert. Zumindest ist das in der Datei angegeben und sie sieht gut aus wenn ich sie mir als utf-8 in meinem Editor anzeigen lasse. Lese ich mir die Datei mit lxml ein und lasse sie mir den eingelesenen Baum folgendermaßen ausgeben:
Code: Alles auswählen
with open("test.xml", "r") as f:
tree = etree.parse(f)
print etree.tostring(tree, pretty_print=True, encoding="UTF-8")
Probleme bekomme ich erst wenn ich auf beispielsweise den Text eines Elements (sagt man das so?) zugreifen möchte der ein Unicode-Zeichen enthält.
bei einem Zugriff auf den Text eines Elements mit
Code: Alles auswählen
for elem in root.iterchildren():
print elem.tag, elem.text
File "test.py", line 18, in search_values
print elem.tag, elem.text
UnicodeEncodeError: 'ascii' codec can't encode character u'\xb0' in position 3: ordinal not in range(128)
Wie kann ich mir die strings denn nu anzeigen lassen? Bisher habe ich immer versucht mit encode ``some_string.encode('utf-8')`` als bytestring darstellen zu lassen. Mitlerweile habe ich so viele Varianten ausprobiert - ich weiss gar nicht mehr wo ich anfangen soll.
Wenn mir jemand nen Tipp geben könnte wie ich weitermachen könnte wäre ich echt dankbar
Sebastian