UnicodeDecodeError: 'ascii' Codec Can't Decode Byte
Das Problem
Beim Versuch, eine Python 2.x-Zeichenfolge zu konvertieren, die nicht- Wenn Sie ASCII-Zeichen in eine Unicode-Zeichenfolge konvertieren, kann es sein, dass der Fehler „UnicodeDecodeError: Der Codec ‚ascii‘ kann nicht dekodiert werden“ auftritt Fehler „Byte“. Dies liegt daran, dass das Standardverhalten darin besteht, eine ASCII-Kodierung anzunehmen, die keine Nicht-ASCII-Zeichen verarbeiten kann.
Schnelllösung
- Stellen Sie sicher, dass Sie Zeichenfolgen explizit in Unicode-Zeichenfolgen dekodieren.
- Gehen Sie nicht davon aus, dass Zeichenfolgen UTF-8-codiert sind.
- Konvertieren Sie Zeichenfolgen frühzeitig in Unicode-Zeichenfolgen wie möglich im Code.
- Erwägen Sie, Ihr Gebietsschema für eine bessere Unicode-Handhabung zu korrigieren.
- Vermeiden Sie schnelle Nachlade-Hacks.
Unicode in Python 2.x verstehen
Unicode-Strings haben keine Codierung und enthalten Unicode-Punktcodes, während Strings codierten Text enthalten (z. B. UTF-8, UTF-16). Die Verwendung von unicode() als Qualitätstor durch das Markdown-Modul stellt sicher, dass eingehende Strings Unicode-Strings sind.
Fallstricke und Beispiele
- Explizite Konvertierung ohne Codierung: unicode('€')
- Neuer Formatstring in Unicode-String: u"Die Währung ist: {}".format('€')
- Alte Formatzeichenfolge in Unicode-Zeichenfolge: u'Die Währung ist: %s' % '€'
- Zeichenfolge an Unicode anhängen: u' Die Währung ist: ' '€'
Das Unicode-Sandwich
Erstellen Sie ein „Unicode-Sandwich“ in Ihrem Code: Eingabe dekodieren Konvertieren Sie Daten in Unicode, arbeiten Sie mit Unicode-Strings und kodieren Sie sie bei der Ausgabe in Strings. Dies vermeidet Codierungsprobleme in der Mitte des Codes.
Eingabe und Decodierung
- Definieren Sie Unicode-Zeichenfolgen im Quellcode mit dem Präfix „u“ (z. B. u‘Zürich‘).
- Legen Sie den richtigen Codierungsheader für Quellcode fest, der Nicht-ASCII-Zeichen enthält (z. B. #-Codierung: utf-8).
- Verwenden Sie io.open mit der entsprechenden Codierung für die Eingabe von Textdateien.
- Verwenden Sie backports.csv für die Verarbeitung von Nicht-ASCII-CSV-Dateien.
- Konfigurieren Sie Datenbanken um Unicode-Daten zurückzugeben.
- Dekodieren Sie HTTP-Inhalte manuell basierend auf den Content-Type-Headern Zeichensatz.
Ausgabe
- print() versucht, Unicodes in die Kodierung der Konsole zu kodieren.
- Standardausgabekodierung kann mit der Umgebungsvariablen PYTHONIOENCODING erzwungen werden.
- Verwenden Sie io.open, um Unicodes in Byte-Strings zu kodieren Dateiausgabe.
Python 3-Unterschiede
- Die Zeichenfolge von Python 3 ist eine Unicode-Zeichenfolge.
- Standardkodierung ist UTF-8.
- open() arbeitet standardmäßig im Textmodus und gibt decodierte str (Unicode) zurück diejenigen).
Das obige ist der detaillierte Inhalt vonWarum erhalte ich in Python 2.x den Fehler „UnicodeDecodeError: ‚ASCII'-Codec kann Byte nicht dekodieren' und wie kann ich ihn beheben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!