【发布时间】:2019-12-12 19:33:58
【问题描述】:
我正在 Python 中创建 XML 文件,并且我的 XML 中有一个字段,用于放置文本文件的内容。我是这样做的
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') 进行编码,但仍然出现错误。我知道这个问题很常见,但我从其他问题中得到的所有解决方案都不适合我。
更新
Traceback:仅使用脚本第一行的特殊注释
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。 -
已更新,当我使用
decode时,它成功创建了我的XML,但在我的浏览器上无法查看该文件。 -
请注意,使用
# -*- coding: utf-8 -*-仅用于在 python 源中插入非 ASCII 字符。它不会以任何方式影响字符串的编码/解码。此外,如果文件myText.txt不是 ASCII,您应该使用codecs.open并提供正确的编码:codecs.open('myText.txt', 'r', 'utf-8')。 -
此外,如果您的文本不只是 ASCII,您应该将编码添加到
tree.write(另请参阅 docs) -
可能是一个不间断的空间。只是说。 Mac上的选项+空格。 UTF-8 中的 0xC2 0xA0。
标签: python