Python UnicodeDecodeError: ASCII-Codec kann Byte in Position nicht decodieren: Ordnungszahl nicht im Bereich

Abid Ullah 21 Juni 2023
  1. Unicode-Decodierungsfehler in Python
  2. So lösen Sie den Unicode-Decodierungsfehler in Python
Python UnicodeDecodeError: ASCII-Codec kann Byte in Position nicht decodieren: Ordnungszahl nicht im Bereich

In diesem Artikel erfahren Sie, wie Sie den UnicodeDecodeError beheben, der während der Ausführung des Codes auftritt. Wir werden uns die verschiedenen Gründe ansehen, die diesen Fehler verursachen.

Wir werden auch Möglichkeiten finden, diesen Fehler in Python zu beheben. Beginnen wir damit, was der UnicodeDecodeError in Python ist.

Unicode-Decodierungsfehler in Python

Wenn Sie mit einem wiederkehrenden UnicodeDecodeError konfrontiert sind und sich nicht sicher sind, warum es passiert oder wie Sie es beheben können, ist dies der richtige Artikel für Sie.

In diesem Artikel gehen wir eingehend darauf ein, warum dieser Fehler auftritt und wie er auf einfache Weise behoben werden kann.

Ursachen für Unicode-Decodierungsfehler in Python

In Python tritt der UnicodeDecodeError auf, wenn wir eine Art von Codec verwenden, um zu versuchen, Bytes zu decodieren, die nicht einmal mit diesem Codec codiert wurden. Um genauer zu sein, lassen Sie uns dieses Problem mit Hilfe einer Schloss-Schlüssel-Analogie verstehen.

Angenommen, wir haben ein Schloss erstellt, das nur mit einem eindeutigen Schlüssel geöffnet werden kann, der speziell für dieses Schloss hergestellt wurde.

Was passiert, wenn Sie versuchen würden, dieses Schloss mit einem Schlüssel zu öffnen, der nicht für dieses Schloss gemacht wurde? Es würde nicht passen.

Erstellen wir die Datei example.txt mit folgendem Inhalt.

𝘈Ḇ𝖢𝕯٤ḞԍНǏ
hello world

Lassen Sie uns versuchen, diese Datei mit dem Codec ascii zu decodieren, indem Sie den folgenden Code verwenden.

Beispiel 1:

with open("example.txt", "r", encoding="ascii") as f:
    lines = f.readlines()
    print(lines)

Die Ausgabe des Codes:

Traceback (most recent call last):
  File "/home/fatina/PycharmProjects/examples/main.py", line 2, in <module>
    lines = f.readlines()
  File "/usr/lib/python3.10/encodings/ascii.py", line 26, in decode
    return codecs.ascii_decode(input, self.errors)[0]
UnicodeDecodeError: 'ascii' codec can't decode byte 0xf0 in position 0: ordinal not in range(128)

Schauen wir uns ein weiteres, einfacheres Beispiel an, was passiert, wenn Sie eine Zeichenfolge mit einem Codec codieren und mit einem anderen decodieren.

Beispiel 2:

string = "𝘈Ḇ𝖢𝕯٤ḞԍНǏ"
encoded_string = string.encode("utf-8")
decoded_string = encoded_string.decode("ascii")
print(decoded_string)

In diesem Beispiel haben wir eine Zeichenfolge, die mit dem Codec utf-8 codiert ist, und in der folgenden Zeile versuchen wir, diese Zeichenfolge mit dem Codec ascii zu decodieren.

Die Ausgabe des Codes:

Traceback (most recent call last):
  File "/home/fatina/PycharmProjects/examples/main.py", line 4, in <module>
    decoded_string = encoded_string.decode('ascii')
UnicodeDecodeError: 'ascii' codec can't decode byte 0xf0 in position 0: ordinal not in range(128)

Dies liegt daran, dass der Inhalt der Datei in Beispiel 1 und die Zeichenfolge in Beispiel 2 nicht mit dem ascii-Codec kodiert wurden, wir aber versucht haben, diese Skripte damit zu dekodieren. Daraus resultiert der UnicodeDecodeError.

So lösen Sie den Unicode-Decodierungsfehler in Python

Die Lösung dieses Problems ist ziemlich einfach. Wenn wir die Python-Dokumentation untersuchen, werden wir mehrere verfügbare Standard-Codecs sehen, die Ihnen beim Decodieren von Bytes helfen.

Wenn wir also in den obigen Beispielcodes ascii durch den utf-8-Codec ersetzen würden, hätte dies die Bytes in example.txt erfolgreich dekodiert.

Beispielcode:

with open("example.txt", "r", encoding="utf-8") as f:
    lines = f.readlines()
    print(lines)

Die Ausgabe des Codes:

['𝘈Ḇ𝖢𝕯٤ḞԍНǏ\n', 'hello world']

Was das zweite Beispiel betrifft, müssen Sie nur dasselbe tun.

Beispielcode:

string = "𝘈Ḇ𝖢𝕯٤ḞԍНǏ"
encoded_string = string.encode("utf-8")
decoded_string = encoded_string.decode("utf-8")
print(decoded_string)

Die Ausgabe des Codes:

𝘈Ḇ𝖢𝕯٤ḞԍНǏ

Es ist wichtig zu erwähnen, dass eine Zeichenfolge manchmal nicht vollständig mit einem Codec decodiert werden kann.

Wenn also Bedarf besteht, können Sie Ihr Programm so entwickeln, dass alle Zeichen ignoriert werden, die es nicht entschlüsseln kann, indem Sie einfach das Argument Ignorieren wie folgt hinzufügen:

with open("example.txt", "r", encoding="utf-8", errors="ignore") as f:
    lines = f.readlines()
    print(lines)

Dadurch werden zwar alle Fehler übersprungen, auf die der Compiler beim Decodieren einiger Zeichen stößt, es ist jedoch wichtig zu erwähnen, dass dies zu Datenverlust führen kann.

Wir hoffen, dass Sie diesen Artikel hilfreich finden, um zu verstehen, wie Sie den UnicodeDecodeError in Python beheben können.

Autor: Abid Ullah
Abid Ullah avatar Abid Ullah avatar

My name is Abid Ullah, and I am a software engineer. I love writing articles on programming, and my favorite topics are Python, PHP, JavaScript, and Linux. I tend to provide solutions to people in programming problems through my articles. I believe that I can bring a lot to you with my skills, experience, and qualification in technical writing.

LinkedIn

Verwandter Artikel - Python Error