1

我正在尝试使用 lxml 遍历 XML 文件(UTF-8 编码,以 开头),但在字符丂上出现以下错误:

UnicodeEncodeError: 'cp932' codec can't encode character u'\u4e02' in position 0: 非法多字节序列

在此之前的其他字符被正确打印出来。代码是:

parser = etree.XMLParser(encoding='utf-8')
tree = etree.parse("filename.xml", parser)
root = tree.getroot()
for elem in root:
    print elem[0].text

该错误是否意味着它没有在 utf-8 中解析文件,而是在 shift JIS 中解析文件?

4

2 回答 2

2

UnicodeEncodeError指向异常发生位置的堆栈跟踪。不幸的是,您没有包含它,但它很可能是将 unicode 文本打印到标准输出的最后一行。我假设标准输出cp932在您的系统上使用编码。

如果我的假设是正确的,您应该考虑更改您的环境,以便 stdout 使用可以表示 unicode 字符的编码(如 UTF-8)。(参见示例通过 Python 中的 sys.stdout 编写 unicode 字符串)。

于 2012-12-07T15:28:12.297 回答
2

我在使用 lxml 的 objectify 时遇到了类似的情况。这是我能够解决它的方法。

import unicodedata
my_name = root.name.text
if isinstance(my_name, unicode):
    # Decode to string.
    my_name = unicodedata.normalize('NFKD', my_name).encode('ascii','ignore')
于 2013-10-08T21:33:15.307 回答