当我将 utf-8 编码的 xml 提供给 ExpatParser 实例时:
def test(filename):
parser = xml.sax.make_parser()
with codecs.open(filename, 'r', encoding='utf-8') as f:
for line in f:
parser.feed(line)
...我得到以下信息:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "test.py", line 72, in search_test
parser.feed(line)
File "/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/xml/sax/expatreader.py", line 207, in feed
self._parser.Parse(data, isFinal)
UnicodeEncodeError: 'ascii' codec can't encode character u'\xb4' in position 29: ordinal not in range(128)
我可能在这里遗漏了一些明显的东西。如何将解析器的编码从“ascii”更改为“utf-8”?
最佳答案
您的代码在 Python 2.6 中失败,但在 3.0 中有效。
这在 2.6 中确实有效,大概是因为它允许解析器本身找出编码(可能通过读取在 XML 文件的第一行可选地指定的编码,否则默认为 utf-8):
def test(filename):
parser = xml.sax.make_parser()
parser.parse(open(filename))
关于python - 在 Python 中设置 sax 解析器的编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/857597/