> 백엔드 개발 > XML/RSS 튜토리얼 > lxml이 xml을 처리할 때 발생하는 문자 인코딩 문제에 대한 자세한 설명

lxml이 xml을 처리할 때 발생하는 문자 인코딩 문제에 대한 자세한 설명

黄舟
풀어 주다: 2017-03-17 16:53:25
원래의
2507명이 탐색했습니다.

문제를 단순화하기 위해 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿