it-swarm.com.de

UnicodeDecodeError: Der 'charmap'-Codec kann Byte X an Position Y nicht decodieren: Zeichen werden <undefiniert> zugeordnet

Ich versuche, ein Python 3-Programm zum Bearbeiten einer mit Informationen gefüllten Textdatei zu verwenden. Beim Versuch, die Datei zu lesen, wird jedoch der folgende Fehler angezeigt:

Rückverfolgung (letzter Anruf zuletzt):
Datei "SCRIPT LOCATION", Zeile NUMBER, in
text = file.read()
Datei "C:\Python31\lib\encodings\cp1252.py", Zeile 23, in decodieren
return codecs.charmap_decode(input,self.errors,decoding_table)[0]
UnicodeDecodeError: 'charmap' Codec kann Byte 0x90 an Position 2907500 nicht decodieren: Zeichenzuordnung zu <undefined>

417
Eden Crow

Die betreffende Datei verwendet nicht die CP1252-Codierung. Es wird eine andere Codierung verwendet. Welches müssen Sie selbst herausfinden. Häufige sind Latin-1 und UTF-8. Da x9 in Latin-1 eigentlich nichts bedeutet, ist UTF-8 (wobei x9 ein Fortsetzungsbyte ist) wahrscheinlicher.

Sie geben die Codierung beim Öffnen der Datei an:

file = open(filename, encoding="utf8")
713
Lennart Regebro

Als Erweiterung zu @LennartRegebro antworten:

Wenn Sie nicht wissen, um welche Codierung es sich handelt und obige Lösung nicht funktioniert (es ist nicht utf8) und Sie nur raten - es gibt Online-Tools die Sie verwenden könnten, um zu identifizieren, was Kodierung das ist. Sie sind nicht perfekt, funktionieren aber normalerweise einwandfrei. Nachdem Sie die Kodierung herausgefunden haben, sollten Sie in der Lage sein, die obige Lösung zu verwenden.

EDIT: (aus Kommentar kopiert)

Ein sehr beliebter Texteditor Sublime Text verfügt über einen Befehl zum Anzeigen der Codierung, wenn dieser festgelegt wurde ...

  1. Gehen Sie zu View -> Show Console (oder Ctrl+`)

enter image description here

  1. Tippe unten in das Feld view.encoding() und hoffe auf das Beste (ich konnte nichts anderes als Undefined bekommen, aber vielleicht hast du mehr Glück ...)

enter image description here

33

Nur hinzufügen, falls file = open(filename, encoding="utf8") nicht funktioniert, versuchen Sie file = open(filename, errors='ignore')

30
Declan Nnadozie

Wenn Sie die Datei nicht dekodieren müssen, z. B. um sie auf eine Website hochzuladen, können Sie auch open(filename, 'rb'). r = lesen, b = binär

1
Kyle Parisi