解析utf8 xml时出现lxml编码错误
我试图用lxml遍历一个XML文件(UTF-8编码,以开头),但在字符上出现以下错误丂 : UnicodeEncodeError:“cp932”编解码器无法对位置0中的字符u'\u4e02'进行编码:非法的多字节序列 在此之前的其他字符将正确打印出来。 代码是:解析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
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)中不起作用。