Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erläuterung des Zeichencodierungsproblems bei der Verarbeitung von XML durch lxml

Detaillierte Erläuterung des Zeichencodierungsproblems bei der Verarbeitung von XML durch lxml

黄舟
黄舟Original
2017-03-17 16:53:252421Durchsuche

Um das Problem zu vereinfachen, wird der Inhalt von xml in die folgende Form vereinfacht:

<?xml version="1.0" encoding="gbk"?><DOCUMENT><da><![CDATA[中文,就是任性]]></da></DOCUMENT>

Die Codierung ist gbk und einer der Knoten ist ein chinesisches Schriftzeichen
Bei der Verwendung von lxml zum Extrahieren des Werts eines Knotens ist die folgende Ausnahme aufgetreten

lxml.etree.XMLSyntaxError: Extra content at the end of the document

Das entsprechende Python-Skript lautet derzeit:

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))

Vor der Vereinfachung wurde jedoch berichtet, dass es sich um eine weitere Ausnahme handelt

lxml.etree.XMLSyntaxError: input conversion failed due to input error, bytes 0x8B 0x2C 0xE6 0x9D

Egal um welche Ausnahme es sich handelt, sie hängt wahrscheinlich mit der Kodierungsform der Zeichen zusammen.
Nach mehreren erfolglosen Versuchen habe ich später diesen Artikel über Stackoverflow gesehen. Das im Artikel erwähnte Problem hing mit dem Codierungswert in XML zusammen. Ich habe versucht, einen Code hinzuzufügen Ersatzanweisung, die die vorherige Kodierung="gbk" durch Kodierung:"utf-8" ersetzt

Also haben wir endlich das Ergebnis erhalten:
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))

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung des Zeichencodierungsproblems bei der Verarbeitung von XML durch lxml. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn