문제를 단순화하기 위해 xml의 내용을 다음 형식으로 단순화합니다.
<?xml version="1.0" encoding="gbk"?><DOCUMENT><da><![CDATA[中文,就是任性]]></da></DOCUMENT>
인코딩은 gbk이고 노드 중 하나는 한자입니다.
using 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의 인코딩 값과 관련이 있습니다.
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))
대체 코드를 추가했습니다. 문에서 이전 인코딩="gbk"를 인코딩:"utf-8"
으로 바꾸면 마침내 결과를 얻었습니다.
da, 中文,就是任性 DOCUMENT, None
위 내용은 lxml이 xml을 처리할 때 발생하는 문자 인코딩 문제에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!