>  기사  >  백엔드 개발  >  lxml이 xml을 처리할 때 문자 인코딩 문제

lxml이 xml을 처리할 때 문자 인코딩 문제

黄舟
黄舟원래의
2017-04-18 09:16:022525검색

문제를 단순화하기 위해 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&#39;<?xml version="1.0" encoding="gbk"?><DOCUMENT><da><![CDATA[中文,就是任性]]></da></DOCUMENT>&#39;
for event,element in etree.iterparse(BytesIO(tst.encode(&#39;utf-8&#39;))):
    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&#39;<?xml version="1.0" encoding="gbk"?><DOCUMENT><da><![CDATA[中文,就是任性]]></da></DOCUMENT>&#39;
tst = tst.replace(&#39;encoding="gbk"&#39;, &#39;encoding="utf-8"&#39;)
for event,element in etree.iterparse(BytesIO(tst.encode(&#39;utf-8&#39;))):
    print("%s, %s" % (element.tag, element.text))

이전 인코딩="gbk"를 인코딩:"utf-8"로 바꾸는 대체 문을 추가하고 최종적으로 결과를 얻었습니다:

da, 中文,就是任性
DOCUMENT, None

위 내용은 lxml이 xml을 처리할 때 문자 인코딩 문제의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.