为了简化问题,就把xml的内容简化为如下的形式:
<?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
Atas ialah kandungan terperinci lxml处理xml时的字符编码问题. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!
Kaedah crawler Python untuk mendapatkan data
Bagaimana untuk menukar pdf ke format xml
Bagaimana untuk menyemak penggunaan memori jvm
arahan penangkapan paket linux
Bolehkah chatgpt digunakan di China?
Cara memasang penterjemah pycharm
Pengenalan kepada nama domain peringkat atas yang biasa digunakan
Jenis penggunaan dalam JavaScript