Das Auftreten des UnicodeDecodeError: 'ascii' codec can't decode byte in Python 2.x weist auf einen Versuch hin um einen Python 2.x-String, der Nicht-ASCII-Zeichen enthält, in einen Unicode-String zu konvertieren, ohne die Codierung des Originals anzugeben string.
Unicode-Strings, anders als Strings, enthalten Unicode-Punktcodes und können jeden Unicode-Punkt im gesamten Spektrum darstellen. Zeichenfolgen hingegen enthalten codierten Text wie UTF-8, UTF-16 oder ISO-8895-1. Zeichenfolgen werden in Unicode dekodiert und umgekehrt. Dateien und Textdaten werden immer in codierten Strings übertragen.
Das Markdown-Modul verwendet unicode(), um eingehende Strings zu validieren und sicherzustellen, dass es sich entweder um ASCII- oder umgebrochene Unicode-Strings handelt. Da die Markdown-Autoren die Kodierung der eingehenden Zeichenfolge nicht bestimmen können, verlassen sie sich darauf, dass Benutzer Zeichenfolgen vor der Weitergabe in Unicode dekodieren.
Unicode-Zeichenfolgen können im Code mit dem Präfix „u“ vor dem deklariert werden Zeichenfolge. Zum Beispiel:
my_u = u'my ünicôdé strįng'
Auch ohne einen expliziten unicode()-Aufruf kann es zu Konvertierungen von str in Unicode kommen. Die folgenden Situationen können UnicodeDecodeError-Ausnahmen auslösen:
Quelle Code: Nicht-ASCII-Zeichen können mithilfe von Unicode-Zeichenfolgen mit dem Präfix „u“ in den Quellcode eingefügt werden. Damit Python den Quellcode ordnungsgemäß dekodieren kann, muss ein korrekter Codierungsheader enthalten sein. Verwenden Sie für UTF-8-Dateien:
# encoding: utf-8
Dateien: Verwenden Sie io.open mit der richtigen Kodierung, um Dateien im laufenden Betrieb zu dekodieren. Zum Beispiel für eine UTF-8-Datei:
import io with io.open("my_utf8_file.txt", "r", encoding="utf-8") as my_file: my_unicode_string = my_file.read()
Datenbanken: Konfigurieren Sie Datenbanken so, dass sie Unicode-Zeichenfolgen zurückgeben und Unicode-Zeichenfolgen für SQL-Abfragen verwenden.
HTTP: Webseiten können unterschiedliche Kodierungen haben. Python-Requests gibt Unicode in „response.text“ zurück.
Manuell: Strings manuell mit my_string.decode(encoding) dekodieren, wobei „coding“ die entsprechende Codierung ist.
Python 3 geht mit Unicode etwas anders um als Python 2.x. Die reguläre Zeichenfolge ist jetzt eine Unicode-Zeichenfolge und die alte Zeichenfolge besteht jetzt aus Bytes.
In Python 3 ist die Standardkodierung UTF-8, sodass beim Dekodieren einer Bytezeichenfolge ohne Angabe einer Kodierung UTF-8 verwendet wird. Darüber hinaus arbeitet open() standardmäßig im Textmodus und gibt decodierte str (Unicode-Strings) zurück.
Das obige ist der detaillierte Inhalt vonWie löst man den UnicodeDecodeError: „ASCII'-Codec kann Byte in Python 2.x nicht dekodieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!