python - 在 Python 中设置 sax 解析器的编码

标签 python unicode sax

当我将 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/

相关文章:

python - 如何使用 Python 保存数据库响应中字符串的完整性

java - XML 支持新的 UTF-8(如笑脸)

python - 按字典顺序对字符串进行排序python

python - Pandas 根据条件交换列

python - 如何将具有空值的 JSON 数据转换为字典

java - 在 XML 文件中的特定位置插入字符串

python - Python 中是否有一个快速的 XML 解析器允许我将标记的开始作为流中的字节偏移量?

python - 在 python 中向 getter 发送参数 : Is this an acceptable solution?

mysql - 如何限制数据库中的 unicode 字符?

python - 我应该在我编写的每个 Python 脚本中包含这个样板代码吗?