gpt4 book ai didi

python - XML 写入文件 UnicodeDecodeError Python 2.7.3

转载 作者:数据小太阳 更新时间:2023-10-29 02:51:34 25 4
gpt4 key购买 nike

我搜索了网站,但没有找到适合我的答案。我的问题是我正在尝试将 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)

这来自以下代码:

doc = Document()

base = doc.createElement('Wiki')
doc.appendChild(base)

for ns_dict in listNamespaces:
namespace = doc.createElement('Namespace')
base.appendChild(namespace)
namespace.setAttribute('NS', ns_dict)

for title in listNamespaces[ns_dict]:

page = doc.createElement('Page')
try:
title.encode('utf8')
page.setAttribute('Title', title)
except:
newTitle = title.decode('latin1', 'ignore')
newTitle.encode('utf8', 'ignore')
page.setAttribute('Title', newTitle)

namespace.appendChild(page)
text = doc.createElement('Content')
text_content = doc.createTextNode(listNamespaces[ns_dict][title])
text.appendChild(text_content)
page.appendChild(text)

f1 = open('pageText.xml', 'w')
f1.write(doc.toprettyxml(indent="\t", encoding="utf-8"))
f1.close()

有或没有编码/解码“igonore”参数都会发生错误。添加

# -*- coding: utf-8 -*- 

没有帮助。

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

非常感谢任何帮助,包括指向我未找到的答案的链接。

谢谢。

最佳答案

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

您的错误是由字节串与 unicode 数据混合引起的,并且您的编码字节串无法解码为 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')

关于python - XML 写入文件 UnicodeDecodeError Python 2.7.3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16404069/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com