XML Datei in utf-16 und nicht in utf-8 speichern

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Unicode :(

Hallo,

ich möchte mit Python eine XML Datei in utf-16le (le für little endian) speichern. Leider werden die XML Dateien Standardmäßig in utf-8 gespeichert? Wie kann ich das ändern?

Als XML Parser nutze ich den der Standardmäßig bei Python2.2.2 enthalten ist. Ich nutze den DOM und SAX Parser. Bei beiden Varianten wird es als UTF-8 abgespeichert.

Danke für eure Hilfe :)

Maik
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Unicode :( hat geschrieben: ich möchte mit Python eine XML Datei in utf-16le (le für little endian) speichern. Leider werden die XML Dateien Standardmäßig in utf-8 gespeichert? Wie kann ich das ändern?
Hi Maik!

Mit dem Modul codecs kannst du bestimmen, in welchem Coding die Datei gespeichert wird. (siehe codecs.open):
http://python.org/doc/2.4.1/lib/module-codecs.html
Falls das codecs-Modul von 2.2 Probleme macht, kannst du evt. das von 2.4 verwenden.

Und den Eintrag für das Coding, im Kopf des XML-Strings, würde ich einfach nur per "replace" ersetzen.
Da ich aber keine Erfahrung mit den XML-Modulen in Python habe, weiß ich nicht ob es nicht auch eine bessere Möglichkeit dafür gibt.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Gast

Das hatte ich auch schon heraus gefunden. Man kann eine Datei als utf-16 usw. öffnen. Mit folgendem Code

import codecs
fileObj = codecs.open( "someFile", "r", "utf-8")

oder auch

xml.dom.ext.Prettyprint(newdocp,codecs.open(outputFile, "w", "utf-16" ))

Dann steht aber immer noch z.B. im DOM Baum, das die Datei in utf-8 gespeichert wurde. Außerdem werden dann in der Datei nach jedem Buchstaben diverse Leerzeichen eingefügt. Dadurch ist die XML Datei ja Zerstört.

Das sieht dann so aus:
ÿþ< ? x m l v e r s i o n = ' 1 . 0 ' e n c o d i n g = ' U T F - 8 ' ? > < t e s t > ...

Kann man nicht zB beim createDocument sagen das es eine utf-8 Datei ist? Außerdem habe ich beim SAX Parsen das Problem, das vor jedem String, den ich in die Datei schreibe der BOM hinzugefügt wird.

fdout.write(escape(test).encode("utf-16"))

Das ist ja auch nicht XML Konform und zerstört die XML Datei.

Ich bin verwirrt
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Hi!

Vielleicht hilft dir xml.sax.saxutils.XMLGenerator weiter. Damit kann man auch ein Coding angeben.

http://python.org/doc/2.4.1/lib/module- ... utils.html

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Antworten