Seite 1 von 1
XML / Codierung nicht korrekt?
Verfasst: Montag 8. November 2004, 13:19
von Gast
Hi!
Ich habe ein Problem mit verschiedenen XML-Dateien, die ich parsen will. Zunächst bestand mein Problem darin, dass ich Fehlermeldungen bei Umlauten bekam. Das altbekannte
Nachdem ich hier verschiedene Ratschläge gelesen habe, die XML-Datei im Unicode-Format zu speichern, habe ich das auch getan. Ich benutze den
Context Texteditor, falls den jemand kennt, da gibt es die Option
Tools=>Convert text to => Unicode. Das sollte eigentlich tun, oder?
Nachdem ich das gemacht habe, kann ich jetzt gar nicht mehr parsen. Meine XML-Datei fängt so an:
Code: Alles auswählen
<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
Das Ergebnis ist folgendes:
Reines validieren der Datei gegen die DTD gibt:
Code: Alles auswählen
encoding 'iso-8859-1' conflicts with autodetected encoding
Der Versuch zu parsen ergibt dann:
Code: Alles auswählen
SAXParseException: encoding specified in XML declaration is incorrect
Mein Code zum parsen sieht dabei so aus:
Code: Alles auswählen
from xml.sax import make_parser
ch=eigener_Handler()
parser=make_parser()
parser.setContentHandler(ch)
parser.parse(datei)
Wo liegt jetzt der Fehler, dass er mit der Codierung meckert? Und wie kriege ich den Parser dazu, Umlaute zu fressen?
Danke schon mal für Vorschläge!
Gruß,
Michael
Zusatz
Verfasst: Montag 8. November 2004, 13:26
von Michael Euteneuer
Wollte nur hinzufügen, dass ich kein Gast bin, sondern angemeldet. Hab mir nur zuviel Zeit gelassen mit dem schreiben, wie es aussieht, und bin dabei ausgelogt worden...
Grüße,
Michael
Verfasst: Montag 8. November 2004, 14:15
von Dookie
Hi Michael,
die Meldung "encoding 'iso-8859-1' conflicts with autodetected encoding" sagt ja schon alles.
Ändere
Code: Alles auswählen
<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
in
Code: Alles auswählen
<?xml version="1.0" encoding="utf-8" standalone="no"?>
dann klappts.
Gruß
Dookie
Leider nicht
Verfasst: Montag 8. November 2004, 14:27
von Michael Euteneuer
Danke für die schnelle Antwort, aber leider gibt das dann folgende Meldung:
Folgendes hab ich noch probiert:
Sagt das was über mein Problem aus?
Gruß,
Michael
Verfasst: Montag 8. November 2004, 14:47
von Dookie
hmm mal wieder Windowsspezialitäten, wie es scheint schreibt dein Editor im mbcs-codec, da muss ich dich auf die unicode faq u.s.w. verweisen.
http://p-nand-q.com/python/unicode_faq.html
http://p-nand-q.com/python/umlaute_in_xml.html
http://python.active-venture.com/lib/node127.html
Gruß
Dookie
Verfasst: Montag 8. November 2004, 15:05
von Michael Euteneuer
Meine Python-Skripte schreibe ich allerdings nicht im Texteditor, sondern in der Python-Shell (bzw. in von dort aus geöffneten Fenstern) von Python 2.3, die als IDLE mitgeliefert wird.
Das sys.getfilesystemencoding() hatte ich auch dort ausgeführt, das dürfte also nix mit den XML-Dateien zu tun haben, oder?
Gruß,
Michael
Verfasst: Montag 8. November 2004, 15:30
von Dookie
Sagen wir mal sollte nichts damit zu tun haben.
Was kommt für eine Ausgabe, wenn du folgendes in der Pythonshell versuchst:
Gruß
Dookie
Verfasst: Montag 8. November 2004, 16:01
von Gast
Dookie hat geschrieben:
Was kommt für eine Ausgabe, wenn du folgendes in der Pythonshell versuchst:
Das gibt folgendes:
Code: Alles auswählen
>>> print repr(open(r"C:\Dokumente und Einstellungen\Michael\...longpath...\datei.xml", 'r').read(8))
'\xff\xfe<\x00?\x00x\x00'
Das wiederum sieht für mich wie Unicode aus, allerdings erzeugt print etwas seltsames... Kann es hier nicht darstellen, copy&paste nimmt das nicht mit... Fängt mit
ÿþ< an, dann kommen die ersten Zeichen des XML-Files, jeweils durch ein Quadrat getrennt.... Das geht auch bei längeren Stücken so weiter.
Hilft das weiter?
Gruß und Dank,
Michael
Verfasst: Montag 8. November 2004, 16:12
von Michael Euteneuer
P.S.: Und warum zur Hölle loggt es mich immer aus?
Michael
Verfasst: Montag 8. November 2004, 16:39
von Dookie
Das mit dem Ausloggen könnte ein Problem mit den Cookies sein, lösch die mal und logge dich neu ein.
hilft weiter
ist Unicode, allerdings utf-32 (little-endian) und kein utf-8. Schau mal ob du bei deinem Editor für xml utf-8 einstellen kannst.
Gruß
Dookie
Verfasst: Montag 8. November 2004, 17:06
von Michael Euteneuer
Dookie hat geschrieben:Schau mal ob du bei deinem Editor für xml utf-8 einstellen kannst.
Nein, kann ich nicht. Ich habe aber mal einen anderen Texteditor versucht (SciTE), da kann ich explizit UTF-8 als Encoding angeben. Dann meckert er auch nicht mehr beim Start, dass sich encodings widersprechen. Allerdings bekomme ich dann das Problem, das er trotz
Code: Alles auswählen
<?xml version="1.0" encoding="utf-8" standalone="no"?>
folgendes meldet, sobald ein Umlaut auftaucht:
Code: Alles auswählen
UnicodeEncodeError: 'ascii' codec can't encode character u'\xf6' in position 3: ordinal not in range(128)
Wieso versucht der da was mit ascii?
Gruß,
Michael
Verfasst: Montag 8. November 2004, 17:28
von Dookie
könntest Du mal die Funktion eigener_Handler posten und die genaue Fehlermeldung mit der Zeilennummer?
Vermutlich wird versucht den Unicode in einen Bytestring umzuwandeln und dann auszugeben oder zu speichern.
Gruß
Dookie
Verfasst: Montag 8. November 2004, 18:13
von Michael Euteneuer
Hi!
Es Läuft!!!
Die Kombination zweier Deiner Tipps hat geholfen:
1. Der Editor. Ich hab die Sachen jetzt in UTF-8 Codiert.
2. Deine Links. Bei einem dieser Links habe ich was gelesen und angewendet. Statt
in der Funktion characters meines ContentHandler heisst es jetzt
Und alles funktioniert einwandfrei!
Vielen Dank für die Mühe und einen schönen Abend!
Viele Grüße,
Michael