“for line in…” ergibt UnicodeDecodeError: ‘utf-8’ codec can’t decode byte
Lesezeit: 4 Minuten
SujitS
Hier ist mein Code,
for line in open('u.item'):
# Read each line
Immer wenn ich diesen Code ausführe, gibt es den folgenden Fehler:
UnicodeDecodeError: ‘utf-8’-Codec kann Byte 0xe9 an Position 2892 nicht decodieren: ungültiges Fortsetzungsbyte
Ich habe versucht, dies zu lösen und einen zusätzlichen Parameter in open() hinzuzufügen. Der Code sieht so aus:
for line in open('u.item', encoding='utf-8'):
# Read each line
Aber es gibt wieder den gleichen Fehler. Was sollte ich dann tun?
Schlecht codierte Daten würde ich annehmen.
– Andreas Jung
31. Oktober 2013 um 5:57 Uhr
Oder einfach keine UTF-8-Daten.
– Mark Tolonen
31. Oktober 2013 um 6:07 Uhr
Mögliches Duplikat von Python 3 UnicodeDecodeError – Wie debugge ich UnicodeDecodeError?
– Dreier
17. Januar 2019 um 9:03 Uhr
Wir hatten diesen Fehler mit msgpack bei der Verwendung von Python 3 anstelle von Python 2.7. Für uns war die Vorgehensweise, mit Python 2.7 zu arbeiten.
– Jesse W. Collins
5. Juni 2019 um 15:43 Uhr
SujitS
Wie von Mark Ransom vorgeschlagen, habe ich die richtige Codierung für dieses Problem gefunden. Die Kodierung war "ISO-8859-1"also ersetzen open("u.item", encoding="utf-8") mit open('u.item', encoding = "ISO-8859-1") wird das Problem lösen.
Explizit ist besser als implizit (PEP 20).
– 0 _
1. Juli 2016 um 5:46 Uhr
Der Trick ist, dass ISO-8859-1 oder Latin_1 8-Bit-Zeichensätze sind, daher hat jeder Müll einen gültigen Wert. Vielleicht nicht brauchbar, aber wenn man es ignorieren will!
– Kjeld Flarup
12. April 2018 um 8:53 Uhr
Ich hatte das gleiche Problem UnicodeDecodeError: ‘utf-8’ Codec kann Byte 0xd0 an Position 32 nicht decodieren: ungültiges Fortsetzungsbyte. Ich habe Python 3.6.5 verwendet, um aws cli zu installieren. Und als ich aws –version ausprobierte, schlug es mit diesem Fehler fehl. Also musste ich /Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/configparser.py bearbeiten und den Code wie folgt ändern def read(self, filenames, encoding=”ISO-8859-1″):
– Евгений Коптюбенко
27. September 2018 um 14:18 Uhr
Gibt es eine automatische Möglichkeit, die Codierung zu erkennen?
– JoseOrtiz3
29. Januar 2019 um 23:20 Uhr
@OrangeSherbet Ich habe die Erkennung mit implementiert chardet. Hier ist der Einzeiler (nach import chardet): chardet.detect(open(in_file, 'rb').read())['encoding']. Weitere Informationen finden Sie in dieser Antwort: stackoverflow.com/a/3323810/615422
– VertigoRay
20. März 2019 um 13:34 Uhr
Ryoji Kuwae Neto
Folgendes hat bei mir auch funktioniert. ISO 8859-1 wird viel sparen, vor allem bei der Verwendung von Spracherkennungs-APIs.
Möglicherweise haben Sie Recht, dass das OP ISO 8859-1 liest, wie aus dem 0xe9 (é) in der Fehlermeldung hervorgeht, aber Sie sollten erklären, warum Ihre Lösung funktioniert. Der Verweis auf Spracherkennungs-APIs hilft nicht weiter.
– RolfBly
26. Oktober 2017 um 20:26 Uhr
Mark Lösegeld
Ihre Datei enthält eigentlich keine UTF-8-codierten Daten; es enthält eine andere Codierung. Finden Sie heraus, was diese Codierung ist, und verwenden Sie sie in der open Anruf.
Im Windows-1252 Kodierung, zum Beispiel die 0xe9 wäre der Charakter é.
Wie kann ich also herausfinden, um welche Codierung es sich handelt? Ich verwende Linux
– SujitS
31. Oktober 2013 um 11:35 Uhr
Es gibt keine Möglichkeit, das immer zu tun, aber sehen Sie sich die Antwort auf diese Frage an: stackoverflow.com/questions/436220/…
– Remco Gerlich
31. Oktober 2013 um 12:37 Uhr
Shashank
Versuchen Sie, dies zu lesen, indem Sie es verwenden Pandas:
Kommt drauf an, was man unter “funktioniert” versteht. Wenn Sie meinen, dass Ausnahmen vermieden werden, ist dies wahr, da dies die einzige Codierung ist, die keine ungültigen Bytes oder Sequenzen enthält. Das bedeutet jedoch nicht, dass Sie die richtigen Charaktere erhalten.
– Markieren Sie Lösegeld
9. März 2021 um 15:51 Uhr
Peter Mortensen
Wenn Sie Python 2 verwenden, ist Folgendes die Lösung:
import io
for line in io.open("u.item", encoding="ISO-8859-1"):
# Do something
Weil die encoding Parameter funktioniert nicht mit open()erhalten Sie die folgende Fehlermeldung:
TypeError: „encoding“ ist ein ungültiges Schlüsselwortargument für diese Funktion
Kommt drauf an, was man unter “funktioniert” versteht. Wenn Sie meinen, dass Ausnahmen vermieden werden, ist dies wahr, da dies die einzige Codierung ist, die keine ungültigen Bytes oder Sequenzen enthält. Das bedeutet jedoch nicht, dass Sie die richtigen Charaktere erhalten.
– Markieren Sie Lösegeld
9. März 2021 um 15:51 Uhr
Peter Mortensen
Du könntest das Problem lösen mit:
for line in open(your_file_path, 'rb'):
‘rb’ liest die Datei im Binärmodus. Weiterlesen hier.
10847600cookie-check“for line in…” ergibt UnicodeDecodeError: ‘utf-8’ codec can’t decode byteyes
Schlecht codierte Daten würde ich annehmen.
– Andreas Jung
31. Oktober 2013 um 5:57 Uhr
Oder einfach keine UTF-8-Daten.
– Mark Tolonen
31. Oktober 2013 um 6:07 Uhr
Mögliches Duplikat von Python 3 UnicodeDecodeError – Wie debugge ich UnicodeDecodeError?
– Dreier
17. Januar 2019 um 9:03 Uhr
Wir hatten diesen Fehler mit msgpack bei der Verwendung von Python 3 anstelle von Python 2.7. Für uns war die Vorgehensweise, mit Python 2.7 zu arbeiten.
– Jesse W. Collins
5. Juni 2019 um 15:43 Uhr