Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
XML写入文件UnicodeDecodeError Python 2.7.3_Python_Xml_Dom_Python 2.7 - Fatal编程技术网

XML写入文件UnicodeDecodeError Python 2.7.3

XML写入文件UnicodeDecodeError Python 2.7.3,python,xml,dom,python-2.7,Python,Xml,Dom,Python 2.7,我搜索了这个网站,没有找到适合我的答案。我的问题是,我试图将xml写入文件,当我从终端运行脚本时,我得到: Traceback (most recent call last): File "fetchWiki.py", line 145, in <module> pageDictionary = qSQL(users_database) File "fetchWiki.py", line 107, in qSQL writeXML(listNS) File "fetchWiki.py

我搜索了这个网站,没有找到适合我的答案。我的问题是,我试图将xml写入文件,当我从终端运行脚本时,我得到:

Traceback (most recent call last):
File "fetchWiki.py", line 145, in <module>
pageDictionary = qSQL(users_database)
File "fetchWiki.py", line 107, in qSQL
writeXML(listNS)
File "fetchWiki.py", line 139, in writeXML
f1.write(doc.toprettyxml(indent="\t", encoding="utf-8"))       
File "/usr/lib/python2.7/xml/dom/minidom.py", line 57, in toprettyxml
self.writexml(writer, "", indent, newl, encoding)
File "/usr/lib/python2.7/xml/dom/minidom.py", line 1751, in writexml
node.writexml(writer, indent, addindent, newl)
----//---- more lines in here ----//----
self.childNodes[0].writexml(writer, '', '', '')
File "/usr/lib/python2.7/xml/dom/minidom.py", line 1040, in writexml
_write_data(writer, "%s%s%s" % (indent, self.data, newl))
File "/usr/lib/python2.7/xml/dom/minidom.py", line 297, in _write_data
writer.write(data)
File "/usr/lib/python2.7/codecs.py", line 351, in write
data, consumed = self.encode(object, self.errors)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc2 in position 1176: ordinal not
in range(128)
无论是否使用encode/decode“igonore”参数,都会发生错误。 添加

没有帮助

我使用Eclipse和Pydoc创建了python文档,它工作正常,没有问题,但是当我从终端运行它时,它会出错

非常感谢您的帮助,包括我没有找到的答案的链接


谢谢。

您不应该对用于属性的字符串进行编码。
minidom
库在编写时为您处理这些内容

您的错误是由于将bytestring与unicode数据混合而导致的,并且您编码的bytestring不能作为ASCII进行解码

如果您的一些数据是编码的,而其中一些是unicode格式的,那么首先要避免这种情况。如果无法避免处理混合数据,请改为:

page = doc.createElement('Page')
if not isinstance(title, unicode):
    title = title.decode('latin1', 'ignore')
page.setAttribute('Title', title)
注意,您不需要使用
doc.toprettyxml()
;您还可以指示
doc.writexml()
为您缩进XML:

import codecs
with codecs.open('pageText.xml', 'w', encoding='utf8') as f1:
    doc.writexml(f1, indent='\t', newl='\n')

我试试看,谢谢。编辑:我尝试根据您的建议更新代码,但是UnicodeDecode错误仍然发生在同一个字符上。您能否将代码减少到仍然触发错误的最简单版本?什么数据触发了这个错误?我知道是title属性导致了这个错误。还有一个德语名称带有一个uMLauted U。另一个令人费解的是,该代码在Eclipse中运行良好,只是没有从terminalEclipse更改终端中的默认编码;如果这是由于打印到终端造成的,请参阅。
page = doc.createElement('Page')
if not isinstance(title, unicode):
    title = title.decode('latin1', 'ignore')
page.setAttribute('Title', title)
import codecs
with codecs.open('pageText.xml', 'w', encoding='utf8') as f1:
    doc.writexml(f1, indent='\t', newl='\n')