我正在嘗試將xml.dom.minidom
對象中的內容寫入文件。簡單的想法是使用'writexml'方法:在python中寫入XML文件損壞文件
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"))
但是,俄羅斯符號仍然損壞。
在解釋器中查看文本時,文本沒有被破壞,但是在文件中寫入文本時。
只是一個想法:你確定您沒有錯誤地查看文件?也許讀者期待的是另一種編碼,而不是utf-8,它看起來像是borked。 – Nubsis 2010-12-29 12:28:11
@Nubsis這正是發生了什麼事情。觀衆一直期待着ASCII編碼。我會保持線程,因爲使用.decode()也是問題。謝謝! – martinthenext 2011-01-09 19:08:08