我正在尝试使用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中解析文件,而是在移位JIS中解析?
答案 0 :(得分:2)
UnicodeEncodeError
的堆栈跟踪指向发生异常的位置。
不幸的是你没有包含它,但它很可能是将unicode文本打印到stdout的最后一行。我假设stdout在您的系统上使用cp932
编码。
如果我的假设是正确的,您应该考虑更改您的环境,以便stdout使用可以表示unicode字符的编码(如UTF-8)。 (参见例如Writing unicode strings via sys.stdout in Python)。
答案 1 :(得分: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')