문제를 단순화하기 위해 xml의 내용을 다음 형식으로 단순화합니다.
<?xml version="1.0" encoding="gbk"?> <DOCUMENT> <da><![CDATA[中文,就是任性]]></da> </DOCUMENT>
인코딩은 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어떤 예외든 문자의 인코딩 형식과 관련이 있을 것 같습니다.
다양한 시도 끝에 스택
overflow에서 이 기사를 보았습니다. 기사에 언급된 문제는 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!