5 Stimmen

Schreiben von XML in eine Datei korrumpiert Dateien in Python

Ich versuche, Inhalte zu schreiben von xml.dom.minidom Objekt zur Datei. Die einfache Idee ist, die Methode "writexml" zu verwenden:

import codecs

def write_xml_native():
    # Building DOM from XML
    xmldoc = minidom.parse('semio2.xml')
    f = codecs.open('codified.xml', mode='w', encoding='utf-8')
    # Using native writexml() method to write
    xmldoc.writexml(f, encoding="utf=8")
    f.close()

Das Problem ist, dass der nicht lateinisch kodierte Text in der Datei beschädigt wird. Die andere Möglichkeit besteht darin, die Textzeichenfolge abzurufen und sie explizit in die Datei zu schreiben:

def write_xml():
    # Building DOM from XML
    xmldoc = minidom.parse('semio2.xml')
    # Opening file for writing UTF-8, which is XML's default encoding
    f = codecs.open('codified3.xml', mode='w', encoding='utf-8')
    # Writing XML in UTF-8 encoding, as recommended in the documentation
    f.write(xmldoc.toxml("utf-8"))
    f.close()

Dies führt zu dem folgenden Fehler:

Traceback (most recent call last):
  File "D:\Projects\Semio\semioparser.py", line 45, in <module>
    write_xml()
  File "D:\Projects\Semio\semioparser.py", line 42, in write_xml
    f.write(xmldoc.toxml(encoding="utf-8"))
  File "C:\Python26\lib\codecs.py", line 686, in write
    return self.writer.write(data)
  File "C:\Python26\lib\codecs.py", line 351, in write
    data, consumed = self.encode(object, self.errors)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xd0 in position 2064: ordinal not in range(128)

Wie kann ich einen XML-Text in eine Datei schreiben? Was übersehe ich?

EDIT . Der Fehler wird durch Hinzufügen der Anweisung decode behoben: f.write(xmldoc.toxml("utf-8").decode("utf-8")) Aber die russischen Symbole sind nach wie vor korrumpiert.

Der Text wird nicht beschädigt, wenn er in einem Interpreter angezeigt wird, sondern wenn er in eine Datei geschrieben wird.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X