Ich erhalte eine Fehlermeldung mit folgendem Muster:
UnicodeEncodeError: 'ascii' codec can't encode character u'\ufeff' in position 155: ordinal not in range(128)
u'\ufeff'
Ich bin mir nicht sicher, was es ist. Es zeigt sich, wenn ich Web Scraping mache. Wie kann ich Abhilfe schaffen? Die .replace()
String-Methode funktioniert nicht.
Antworten:
Das Unicode-Zeichen
U+FEFF
ist das Byte Order Mark (BOM) und wird verwendet, um den Unterschied zwischen Big- und Little-Endian-UTF-16-Codierung zu erkennen. Wenn Sie die Webseite mit dem richtigen Codec dekodieren, entfernt Python sie für Sie. Beispiele:Beachten Sie, dass
EF BB BF
es sich um eine UTF-8-codierte Stückliste handelt. Es ist für UTF-8 nicht erforderlich, dient jedoch nur als Signatur (normalerweise unter Windows).Ausgabe:
Beachten Sie, dass für den
utf-16
Codec eine Stückliste erforderlich sein muss, oder Python nicht weiß, ob es sich bei den Daten um Big- oder Little-Endian-Daten handelt.quelle
Ich bin auf Python 3 darauf gestoßen und habe diese Frage (und Lösung) gefunden ) gefunden. Beim Öffnen einer Datei unterstützt Python 3 das Schlüsselwort encoding, um die Codierung automatisch zu verarbeiten.
Ohne sie ist die Stückliste im Leseergebnis enthalten:
Bei korrekter Codierung wird die Stückliste im Ergebnis weggelassen:
Nur meine 2 Cent.
quelle
Dieses Zeichen ist die Stückliste oder "Byte Order Mark". Es wird normalerweise als die ersten paar Bytes einer Datei empfangen und zeigt Ihnen, wie Sie die Codierung der restlichen Daten interpretieren. Sie können das Zeichen einfach entfernen, um fortzufahren. Da der Fehler besagt, dass Sie versucht haben, in 'ascii' zu konvertieren, sollten Sie wahrscheinlich eine andere Codierung für alles auswählen, was Sie versucht haben.
quelle
Der Inhalt, den Sie kratzen, ist eher in Unicode als in ASCII-Text codiert, und Sie erhalten ein Zeichen, das nicht in ASCII konvertiert wird. Die richtige 'Übersetzung' hängt davon ab, was die ursprüngliche Webseite dachte. Die Unicode-Seite von Python bietet Hintergrundinformationen zur Funktionsweise.
Versuchen Sie, das Ergebnis zu drucken oder in eine Datei zu schreiben? Der Fehler deutet darauf hin , dass die Daten, die das Problem verursachen, geschrieben und nicht gelesen werden. Diese Frage ist ein guter Ort, um nach Korrekturen zu suchen.
quelle
Hier basiert auf der Antwort von Mark Tolonen. Die Zeichenfolge enthielt verschiedene Sprachen des Wortes 'test', die durch '|' getrennt sind, sodass Sie den Unterschied erkennen können.
Hier ist ein Testlauf:
Es ist wert zu wissen, dass nur beide
utf-8-sig
undutf-16
die ursprüngliche Zeichenfolge nach beidenencode
und zurückbekommendecode
.quelle
Dieses Problem tritt im Wesentlichen auf, wenn Sie Ihren Python-Code in einer UTF-8- oder UTF-16-Codierung speichern , da Python am Anfang des Codes automatisch ein Sonderzeichen hinzufügt (das von den Texteditoren nicht angezeigt wird), um das Codierungsformat zu identifizieren. Wenn Sie jedoch versuchen, den Code auszuführen, wird in Zeile 1 der Syntaxfehler angezeigt, dh der Code wird gestartet, da der Python-Compiler die ASCII-Codierung versteht . Wenn Sie den Code der Datei mit der Funktion read () anzeigen, wird am Anfang des zurückgegebenen Codes '\ ufeff' angezeigt. Die einfachste Lösung für dieses Problem besteht darin , die Codierung wieder auf ASCII-Codierung zu ändern(Dazu können Sie Ihren Code in einen Notizblock kopieren und speichern. Denken Sie daran! Wählen Sie die ASCII-Codierung ... Ich hoffe, dies wird helfen.
quelle