Heim > Backend-Entwicklung > Python-Tutorial > Wie löst man den UnicodeDecodeError: „ASCII'-Codec kann Byte in Python 2.x nicht dekodieren?

Wie löst man den UnicodeDecodeError: „ASCII'-Codec kann Byte in Python 2.x nicht dekodieren?

Barbara Streisand
Freigeben: 2024-12-21 03:01:09
Original
999 Leute haben es durchsucht

How to Solve the UnicodeDecodeError: 'ascii' codec can't decode byte in Python 2.x?

UnicodeDecodeError: 'ascii' Codec Can't Decode Byte

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 Zen in Python 2.x

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'
Nach dem Login kopieren

Fallstricke

Auch ohne einen expliziten unicode()-Aufruf kann es zu Konvertierungen von str in Unicode kommen. Die folgenden Situationen können UnicodeDecodeError-Ausnahmen auslösen:

  • Explizite Konvertierung ohne Codierung: unicode('€')
  • Verwendung von Formatzeichenfolgen im neuen Stil mit Unicode-Zeichenfolgen: u"Die Währung ist: { }".format('€')
  • Verwendung von Formatzeichenfolgen im alten Stil mit Unicode-Zeichenfolgen: u'Die Währung ist: %s' % '€'
  • Anhängen von Zeichenfolgen an Unicode: u'Die Währung ist: ' '€'

Eingabe und Dekodierung

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
Nach dem Login kopieren

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()
Nach dem Login kopieren

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

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage