解析utf8 xml时出现lxml编码错误

解析utf8 xml时出现lxml编码错误,xml,encoding,utf-8,lxml,Xml,Encoding,Utf 8,Lxml,我试图用lxml遍历一个XML文件(UTF-8编码,以开头),但在字符上出现以下错误丂 : UnicodeEncodeError:“cp932”编解码器无法对位置0中的字符u'\u4e02'进行编码:非法的多字节序列 在此之前的其他字符将正确打印出来。 代码是: parser = etree.XMLParser(encoding='utf-8') tree = etree.parse("filename.xml", parser) root = tree.getroot() for elem i

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

UnicodeEncodeError:“cp932”编解码器无法对位置0中的字符u'\u4e02'进行编码:非法的多字节序列

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

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中解析文件?

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


如果我的假设是正确的,你应该考虑改变你的环境,这样STDUT使用一个可以代表Unicode字符的编码(比如UTF-8)。(参见示例)。

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


如果我的假设是正确的,你应该考虑改变你的环境,这样STDUT使用一个可以代表Unicode字符的编码(比如UTF-8)。(参见示例)。

我在使用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')

我使用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')

哦,那只是标准输出编码,我没意识到!我用它只是为了测试,所以我根本没有问题:D谢谢!哦,那只是标准输出编码,我没意识到!我用它只是为了测试,所以我根本没有问题:D谢谢!适用于
r=请求。get(…)
objectify.XML(r.text)中不起作用。
适用于
r=请求。get(…)
objectify.XML(r.text)中不起作用。