【发布时间】:2011-11-15 22:35:41
【问题描述】:
我正在尝试读取包含 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。?)
【问题讨论】:
-
"xml解析器有问题吗?"请发布堆栈跟踪,让我们知道错误发生在哪一行。很难判断异常是发生在
.decode(...)还是.parseString(...)。如果错误发生在.decode(...)上,那么直接的问题不在于 XML 解析器。 -
unicodeContents应该设置为gzContents.decode('utf-8')还是gzContants.decode('utf-8')?帖子中的拼写让我大吃一惊,尤其是因为错误消息似乎根本与该错误无关。 -
@Edwin 我试图指出失败发生在最后一行——以
xmlContent开头的行。我将添加剩余的回溯。 -
@MikeSamuel 是的,这是我将代码转换为简单示例时出现的拼写错误。正如我所提到的,错误发生在以
xmlContent开头的行上。 -
@ulidtko:查看回溯中的路径。不,它不在 Windows 上,与操作系统无关。
标签: python unicode xml-parsing