Запись XML в файл повреждает файлы в python

Я пытаюсь записать содержимое из xml.dom.minidom объект в файл. Простая идея - использовать метод writexml:

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()

Проблема в том, что он повреждает нелатинскую кодировку текста в файле. Другой способ - получить текстовую строку и явно записать ее в файл:

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()

Это приводит к следующей ошибке:

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)

Как мне записать текст XML в файл? Что мне не хватает?

ИЗМЕНИТЬ . Ошибка исправляется добавлением оператора декодирования: f.write (xmldoc.toxml ("utf-8"). Decode ("utf-8")) Но русские символы все еще повреждены.

Текст искажается не при просмотре в интерпретаторе, а при записи в файл.

5
задан martinthenext 19 December 2010 в 21:08
поделиться