- 資訊首頁(yè) > 開(kāi)發(fā)技術(shù) >
- 怎么用lxml處理xml時(shí)的字符編碼問(wèn)題
本篇內容主要講解“怎么用lxml處理xml時(shí)的字符編碼問(wèn)題”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強。下面就讓小編來(lái)帶大家學(xué)習“怎么用lxml處理xml時(shí)的字符編碼問(wèn)題”吧!
為了簡(jiǎn)化問(wèn)題,就把xml的內容簡(jiǎn)化為如下的形式:
<?xml version="1.0" encoding="gbk"?><DOCUMENT><da><![CDATA[中文,就是任性]]></da></DOCUMENT>
它的encoding為gbk,其中的節點(diǎn)有一個(gè)為中文字符
使用lxml提取節點(diǎn)的值時(shí)出現了如下的異常
lxml.etree.XMLSyntaxError: Extra content at the end of the document
此時(shí)對應的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))
不過(guò)簡(jiǎn)化之前,報的是另外一個(gè)異常
lxml.etree.XMLSyntaxError: input conversion failed due to input error, bytes 0x8B 0x2C 0xE6 0x9D
不論異常是哪一個(gè),猜測還是和字符的編碼形式有關(guān)。
經(jīng)過(guò)各種嘗試無(wú)果,后來(lái)在stackoverflow上看到這篇文章,文中提到的問(wèn)題和xml中的encoding值有關(guān),嘗試了增加了一段代碼
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))
增加了一個(gè)替換的語(yǔ)句,將之前的encoding="gbk"替換成encoding:"utf-8"
于是終于得到了結果:
da, 中文,就是任性 DOCUMENT, None
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自互聯(lián)網(wǎng)轉載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權請聯(lián)系QQ:712375056 進(jìn)行舉報,并提供相關(guān)證據,一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容。
Copyright ? 2009-2021 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 珠海市特網(wǎng)科技有限公司 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站