<?xml version="1.0" encoding="gbk"?> <DOCUMENT> <da><![CDATA[中文,就是率性]]></da> </DOCUMENT>
它的encoding为gbk,个中的节点有一个为中文字符 运用lxml提取节点的值时涌现了以下的非常
lxml.etree.XMLSyntaxError: Extra content at the end of the document
此时对应的Python剧本为:
tst = u'<?xml version="1.0" encoding="gbk"?><DOCUMENT><da><![CDATA[中文,就是率性]]></da></DOCUMENT>' for event,element in etree.iterparse(BytesIO(tst.encode('utf-8'))): print("%s, %s" % (element.tag, element.text))
不过简化之前,报的是别的一个非常
lxml.etree.XMLSyntaxError: input conversion failed due to input error, bytes 0x8B 0x2C 0xE6 0x9D
不管非常是哪个,猜想照样和字符的编码情势有关。
经由种种尝试无果,厥后在stackoverflow上看到这篇文章,文中提到的题目和xml中的encoding值有关,尝试了增加了一段代码
tst = u'<?xml version="1.0" encoding="gbk"?><DOCUMENT><da><![CDATA[中文,就是率性]]></da></DOCUMENT>' tst = tst.replace('encoding="gbk"', 'encoding="utf-8"') for event,element in etree.iterparse(BytesIO(tst.encode('utf-8'))): print("%s, %s" % (element.tag, element.text))
增加了一个替代的语句,将之前的encoding="gbk"替代成encoding:"utf-8" 因而终究获得了效果:
da, 中文,就是率性 DOCUMENT, None
以上就是lxml处置惩罚xml时的字符编码题目的细致内容,更多请关注ki4网别的相干文章!