我在Python中創建XML文件,並且在我的XML中有一個字段,我放置了文本文件的內容。我這樣做UnicodeDecodeError:'ascii'編解碼器無法解碼字節0xc2
f = open ('myText.txt',"r")
data = f.read()
f.close()
root = ET.Element("add")
doc = ET.SubElement(root, "doc")
field = ET.SubElement(doc, "field")
field.set("name", "text")
field.text = data
tree = ET.ElementTree(root)
tree.write("output.xml")
然後我得到了UnicodeDecodeError
。我已經嘗試將特別註釋# -*- coding: utf-8 -*-
放在我的腳本之上,但仍然出現錯誤。此外,我試圖執行編碼我的變量data.encode('utf-8')
但仍然有錯誤。我知道這個問題非常普遍,但是我從其他問題中得到的所有解決方案都不適合我。
UPDATE
回溯:使用該腳本的第一行
Traceback (most recent call last):
File "D:\Python\lse\createxml.py", line 151, in <module>
tree.write("D:\\python\\lse\\xmls\\" + items[ctr][0] + ".xml")
File "C:\Python27\lib\xml\etree\ElementTree.py", line 820, in write
serialize(write, self._root, encoding, qnames, namespaces)
File "C:\Python27\lib\xml\etree\ElementTree.py", line 939, in _serialize_xml
_serialize_xml(write, e, encoding, qnames, None)
File "C:\Python27\lib\xml\etree\ElementTree.py", line 939, in _serialize_xml
_serialize_xml(write, e, encoding, qnames, None)
File "C:\Python27\lib\xml\etree\ElementTree.py", line 937, in _serialize_xml
write(_escape_cdata(text, encoding))
File "C:\Python27\lib\xml\etree\ElementTree.py", line 1073, in _escape_cdata
return text.encode(encoding, "xmlcharrefreplace")
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc2 in position 243: ordina
l not in range(128)
回溯只有特殊的註釋:使用.encode('utf-8')
Traceback (most recent call last):
File "D:\Python\lse\createxml.py", line 148, in <module>
field.text = data.encode('utf-8')
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc2 in position 227: ordina
l not in range(128)
我用.decode('utf-8')
和錯誤信息沒有出現,它成功地創建了我的XML文件。但問題是XML在我的瀏覽器上不可見。
查看整個錯誤消息以查看其來源將很有用。同時嘗試使用'decode'而不是'encode'。 – 2013-05-12 14:49:30
已更新,當我使用'decode'時,它成功創建了我的XML,但該文件在我的瀏覽器中不可見。 – 2013-05-12 15:00:36
請注意,使用'# - * - coding:utf-8 - * - '僅用於在Python源代碼中插入非ASCII字符。它不會以任何方式影響字符串的編碼/解碼。另外,如果文件'myText.txt'不是ASCII,則應該使用'codecs.open'並提供正確的編碼:'codecs.open('myText.txt','r','utf-8')' 。 – Bakuriu 2013-05-12 15:17:55