Probleme mit der Zeichenkodierung, wenn lxml XML verarbeitet

黄舟
Freigeben: 2017-04-18 09:16:02
Original
2515 Leute haben es durchsucht

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>
Nach dem Login kopieren

Die Codierung ist gbk und einer der Knoten ist ein chinesisches Schriftzeichen . Verwenden Sie lxml zum Extrahieren. Die folgende Ausnahme trat auf, wenn der Wert des Knotens

lxml.etree.XMLSyntaxError: Extra content at the end of the document
Nach dem Login kopieren

war. Das entsprechende Python-Skript war zu diesem Zeitpunkt:

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))
Nach dem Login kopieren

Allerdings , vor der Vereinfachung wurde eine weitere Ausnahme gemeldet

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

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 auf StackÜberlauf gesehen. Das im Artikel erwähnte Problem hängt mit dem Codierungswert in XML zusammen. Ich habe versucht, einen Code hinzuzufügen

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))
Nach dem Login kopieren
Eine Ersetzungsanweisung hinzugefügt, um die vorherige Kodierung="gbk" durch Kodierung:"utf-8" zu ersetzen, und schließlich das Ergebnis erhalten:

Das obige ist der detaillierte Inhalt vonProbleme mit der Zeichenkodierung, wenn lxml XML verarbeitet. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage