UnicodeDecodeFehlerauflösung: „ASCII“-Codec kann Byte nicht dekodieren
Schnelle Lösung
- Unnötige Dekodierung/Kodierung vermeiden.
- Stellen Sie sicher, dass Ihre Zeichenfolgen nicht als UTF-8 angenommen werden codiert.
- Konvertieren Sie Zeichenfolgen so früh wie möglich in Unicode.
- Beheben Sie Gebietsschemaprobleme (wie in der verknüpften Frage beschrieben).
- Widerstehen Sie der Versuchung, schnelle Reload-Fixes zu verwenden.
Unicode und Python verstehen 2.x
UnicodeDecodeError tritt normalerweise auf, wenn versucht wird, eine Python 2.x-Zeichenfolge, die Nicht-ASCII-Zeichen enthält, in Unicode zu konvertieren, ohne ihre Codierung anzugeben.
Unicode-Zeichenfolgen (Typ: Unicode) stellen eine Sequenz dar von Unicode-Punktcodes, während Zeichenfolgen (Typ: str) codierten Text enthalten (z. B. UTF-8, UTF-16). Zeichenfolgen werden in Unicode dekodiert, während Unicodes in Zeichenfolgen kodiert werden.
Zahlreiche Szenarien, einschließlich expliziter Konvertierungen, Formatzeichenfolgen und Zeichenfolgenverkettung, können UnicodeDecodeError auslösen, wenn Nicht-ASCII-Daten verarbeitet werden.
Eingabe und Dekodierung
- Verwenden Sie Unicode-Zeichenfolgen (mit dem Präfix 'u') für Nicht-ASCII-Zeichen im Quellcode.
- Geben Sie einen Codierungsheader für die Quellcodedatei an, um die korrekte Decodierung zu erleichtern.
- Verwenden Sie io.open mit geeigneter Codierung, um Dateien zu decodieren the fly.
- Verwenden Sie backports.csv für Nicht-ASCII-CSV-Dateien.
- Konfigurieren Datenbanken, um Daten in Unicode zurückzugeben und Unicode-Zeichenfolgen für Abfragen zu verwenden.
- Dekodieren Sie manuell mit string.decode(encoding) mit der richtigen Kodierung.
Intermediate Handling
- Arbeiten Sie mit Unicode-Strings wie mit regulären Strings Zeichenfolgen.
Ausgabe
- Druck kodiert Unicodes basierend auf der Kodierung der Konsole.
- Verwenden Sie io.open, um Unicodes in kodierte Bytezeichenfolgen für Dateien zu konvertieren.
- Stellen Sie die korrekte Datenbankkonfiguration zum Schreiben von Unicode sicher Daten.
Überlegungen zu Python 3
Während Python 3 Unicode besser verarbeitet, ist es wichtig zu verstehen, dass es nicht über native Unicode-Funktionen verfügt. Die Standardkodierung ist UTF-8, und open() arbeitet im Textmodus und gibt dekodierten str (Unicode) unter Verwendung der Gebietsschemakodierung zurück.
Vermeidung von sys.setdefaultencoding('utf8')
Dies Hack verschleiert zugrunde liegende Probleme und stört die Migration zu Python 3. Beheben Sie stattdessen die Grundursache und nutzen Sie Unicode Zen.
Das obige ist der detaillierte Inhalt vonWie kann ich Pythons „UnicodeDecodeError: ‚ASCII'-Codec kann Byte nicht dekodieren …' lösen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!