Ich lese und analysiere eine Amazon XML-Datei und während die XML-Datei ein 'anzeigt, erhalte ich beim Versuch, sie zu drucken, die folgende Fehlermeldung:
'ascii' codec can't encode character u'\u2019' in position 16: ordinal not in range(128)
Nach dem, was ich bisher online gelesen habe, ist der Fehler darauf zurückzuführen, dass sich die XML-Datei in UTF-8 befindet, Python sie jedoch als ASCII-codiertes Zeichen behandeln möchte. Gibt es eine einfache Möglichkeit, den Fehler zu beheben und mein Programm das XML beim Lesen drucken zu lassen?
unicode()
?Antworten:
Wahrscheinlich besteht Ihr Problem darin, dass Sie es in Ordnung analysiert haben und jetzt versuchen, den Inhalt des XML zu drucken, und Sie können es nicht, weil es einige fremde Unicode-Zeichen gibt. Versuchen Sie zuerst, Ihre Unicode-Zeichenfolge als ASCII zu codieren:
Der Teil 'Ignorieren' weist ihn an, diese Zeichen einfach zu überspringen. Aus den Python-Dokumenten:
Vielleicht möchten Sie diesen Artikel lesen: http://www.joelonsoftware.com/articles/Unicode.html , den ich als grundlegendes Tutorial für die Vorgänge sehr nützlich fand. Nach dem Lesen haben Sie nicht mehr das Gefühl, nur zu raten, welche Befehle Sie verwenden sollen (oder zumindest ist mir das passiert).
quelle
.encode('ascii', 'ignore')
verliert unnötig Daten, selbst wenn die OP-Umgebung (in den meisten Fällen) Nicht-ASCII-Zeichen unterstütztEine bessere Lösung:
Wenn Sie mehr darüber erfahren möchten, warum:
http://docs.plone.org/manage/troubleshooting/unicode.html#id1
quelle
u'\u2019
ist schon Unicode.Codieren Sie die Zeichenkodierung Ihrer Umgebung in Ihrem Skript nicht fest. Drucken Sie stattdessen direkt Unicode-Text:
Wenn Ihre Ausgabe in eine Datei (oder eine Pipe) umgeleitet wird; Sie können
PYTHONIOENCODING
envvar verwenden, um die Zeichenkodierung anzugeben:Ansonsten
python your_script.py
soll wie arbeiten - Ihre locale - Einstellungen verwendet werden , um den Text zu kodieren (auf POSIX - Check:LC_ALL
,LC_CTYPE
,LANG
envvars - SatzLANG
zu einer utf-8 locale falls erforderlich).Informationen zum Drucken von Unicode unter Windows finden Sie in dieser Antwort, in der gezeigt wird, wie Unicode auf einer Windows-Konsole, in einer Datei oder mithilfe von IDLE gedruckt wird .
quelle
Ausgezeichneter Beitrag: http://www.carlosble.com/2010/12/understanding-python-and-unicode/
quelle
Sie können etwas von dem Formular verwenden
Dadurch wird ein UTF-8-codierter Bytestring in eine Python-Unicode-Zeichenfolge konvertiert. Die genaue Vorgehensweise hängt jedoch davon ab, wie Sie die XML-Datei laden und analysieren. Wenn Sie beispielsweise nie direkt auf die XML-Zeichenfolge zugreifen, müssen Sie möglicherweise ein Decoderobjekt aus dem
codecs
Modul verwenden .quelle
'...'.encode('utf-8')
Ich habe Folgendes geschrieben, um die lästigen Nicht-ASCII-Anführungszeichen zu korrigieren und die Konvertierung in etwas Verwendbares zu erzwingen.
quelle
Wenn Sie eine ungefähre Darstellung der Zeichenfolge auf dem Bildschirm drucken müssen, anstatt diese nicht druckbaren Zeichen zu ignorieren, versuchen Sie bitte das
unidecode
Paket hier:https://pypi.python.org/pypi/Unidecode
Die Erklärung finden Sie hier:
https://www.tablix.org/~avian/blog/archives/2009/01/unicode_transliteration_in_python/
Dies ist besser als die Verwendung der
u.encode('ascii', 'ignore')
Zeichenfolge für eine bestimmte Zeichenfolgeu
und kann Sie vor unnötigen Kopfschmerzen bewahren, wenn die Zeichengenauigkeit nicht das ist, wonach Sie suchen, aber dennoch eine menschliche Lesbarkeit wünschen.Wirawan
quelle
Fügen Sie die folgende Zeile oben in Ihr Python-Skript ein.
quelle
Python 3.5, 2018
Wenn Sie nicht wissen, was die Codierung ist, aber der Unicode-Parser Probleme hat, können Sie die Datei in öffnen
Notepad++
und in der oberen Leiste auswählenEncoding->Convert to ANSI
. Dann können Sie Ihre Python so schreibenquelle