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.
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.
LinkedInVerwandter Artikel - Python Error
- Adresse wird bereits verwendet Fehler in Python
- AttributeError: __Exit__ in Python
- AttributeError: 'Dict'-Objekt hat kein Attribut 'Append' in Python
- AttributeError: 'NoneType'-Objekt hat kein Attribut 'Text' in Python
- AttributeError: Int-Objekt hat kein Attribut
- AttributeError: Modul Urllib hat keine Attributanforderung