gpt4 book ai didi

python - 将 unicode 对象传递给 XML 解析器时出现 Unicode 错误

转载 作者:行者123 更新时间:2023-11-28 22:03:53 25 4
gpt4 key购买 nike

我正在尝试读取包含 xml 和 unicode 的 gzip 文件,但出现错误。我使用的代码是:

import gzip
import xml

path = "index.mjml.gz"
gzFile = gzip.open(path, mode='r')
gzContents = gzFile.read()
gzFile.close()

unicodeContents = gzContents.encode('utf-8')
xmlContent = xml.dom.minidom.parseString(unicodeContents)
# Do stuff with xmlContent

当我运行此代码时出现以下错误(在以 xmlContent 开头的行上失败)

/Library/Frameworks/EPD64.framework/Versions/7.1/lib/python2.7/xml/dom/minidom.pyc in parseString(string, parser)
1922 if parser is None:
1923 from xml.dom import expatbuilder
-> 1924 return expatbuilder.parseString(string)
1925 else:
1926 from xml.dom import pulldom

/Library/Frameworks/EPD64.framework/Versions/7.1/lib/python2.7/xml/dom/expatbuilder.pyc in parseString(string, namespaces)
938 else:
939 builder = ExpatBuilder()
--> 940 return builder.parseString(string)
941
942

/Library/Frameworks/EPD64.framework/Versions/7.1/lib/python2.7/xml/dom/expatbuilder.pyc in parseString(self, string)
221 parser = self.getParser()
222 try:
--> 223 parser.Parse(string, True)
224 self._setup_subset(string)
225 except ParseEscape:

UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 1141336: ordinal not in range(128)

我找到了一个与此类似的先前答案 Reading utf-8 characters from a gzip file in python ,但我仍然遇到错误。

是不是xml解析器有问题?

(我使用的是 Python 2.7。?)

最佳答案

您不能将 unicode 字符串传递给 xml.dom.minidom.parseString

它必须是适当编码的字节串:

>>> import xml.dom.minidom as xmldom
>>>
>>> source = u"""\
... <?xml version="1.0" encoding="utf-8"?>
... <root><text>Σὲ γνωρίζω ἀπὸ τὴν κόψη</text></root>
... """
>>> doc = xmldom.parseString(source.encode('utf-8'))
>>> print doc.getElementsByTagName('text')[0].toxml()
<text>Σὲ γνωρίζω ἀπὸ τὴν κόψη</text>

编辑

澄清一下——从 gzip 压缩的 xml 文件中读取的流应该直接传递给解析器而不尝试对其进行编码或解码:

import gzip
import xml

path = "index.mjml.gz"
gzFile = gzip.open(path, mode='r')
gzContents = gzFile.read()
gzFile.close()

xmlContent = xml.dom.minidom.parseString(gzContents)

解析器将从文件开头的 xml 声明中读取编码(如果没有,则假定为“utf-8”)。然后它可以使用它来将内容解码为 un​​icode。

关于python - 将 unicode 对象传递给 XML 解析器时出现 Unicode 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8144131/

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