我在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