399 Stimmen

UnicodeDecodeError: Der 'utf8'-Codec kann das Byte 0xa5 an Position 0 nicht decodieren: ungültiges Startbyte

Ich verwende Skripte Python-2.6 CGI aber fand diesen Fehler im Serverprotokoll beim Aufruf von json.dumps(),

Traceback (most recent call last):
  File "/etc/mongodb/server/cgi-bin/getstats.py", line 135, in 
    print json.dumps(__getdata())
  File "/usr/lib/python2.7/json/__init__.py", line 231, in dumps
    return _default_encoder.encode(obj)
  File "/usr/lib/python2.7/json/encoder.py", line 201, in encode
    chunks = self.iterencode(o, _one_shot=True)
  File "/usr/lib/python2.7/json/encoder.py", line 264, in iterencode
    return _iterencode(o, 0)
UnicodeDecodeError: 'utf8' codec can't decode byte 0xa5 in position 0: invalid start byte

Hier gibt die Funktion __getdata() ein Wörterbuch zurück.

Vor dem Posten dieser Frage habe ich diese Frage auf SO gelesen. Wie löse ich diesen Fehler?

16voto

Zuo Punkte 161

Wenn die obigen Methoden nicht funktionieren, sollten Sie in Betracht ziehen, die Codierung der CSV-Datei selbst zu ändern.

Mit Excel:

  1. Öffnen Sie die CSV-Datei mit Excel
  2. Wechseln Sie zur Option Datei-Menü und klicken Sie auf Speichern unter
  3. Klicken Sie auf Durchsuchen, um einen Speicherort für die Datei auszuwählen
  4. Geben Sie den beabsichtigten Dateinamen ein
  5. Wählen Sie die Option *`CSV (durch Kommas getrennt) (.csv)`**
  6. Klicken Sie auf das Extras Dropdown-Menü und wählen Sie Weboptionen
  7. Wählen Sie unter dem Tab Codierung die Option Unicode (UTF-8) aus der Dropdown-Liste Dieses Dokument speichern als
  8. Speichern Sie die Datei

Mit dem Editor:

  1. Öffnen Sie die CSV-Datei mit dem Editor
  2. Wechseln Sie zu Datei > Speichern unter
  3. Wählen Sie als Nächstes den Speicherort für die Datei aus
  4. Wählen Sie die Option Dateityp als Alle Dateien(.)
  5. Geben Sie den Dateinamen mit der Erweiterung .csv an
  6. Wählen Sie im Dropdown-Menü Codierung die Option UTF-8
  7. Klicken Sie auf Speichern, um die Datei zu speichern

Indem Sie dies tun, sollten Sie in der Lage sein, CSV-Dateien zu importieren, ohne auf den UnicodeCodeError zu stoßen.

10voto

amit haldar Punkte 129

Der folgende Codeausschnitt hat bei mir funktioniert.

import pandas as pd
df = pd.read_csv(filename, sep = ';', encoding = 'latin1', error_bad_lines=False) #error_bad_lines ist, um Fehler in einzelnen Zeilen zu vermeiden

8voto

Deepak Ingole Punkte 13531

Die folgende Zeile schädigt den JSON-Encoder:

now = datetime.datetime.now()
now = datetime.datetime.strftime(now, '%Y-%m-%dT%H:%M:%S.%fZ')
print json.dumps({'current_time': now}) // das ist der Übeltäter

Ich habe eine vorübergehende Lösung dafür gefunden.

print json.dumps( {'old_time': now.encode('ISO-8859-1').strip() })

Ich markiere dies vorübergehend als korrekt (bin mir nicht sicher).

4voto

NoamG Punkte 1088

Sie können jede Standardcodierung Ihrer spezifischen Verwendung und Eingabe verwenden.

utf-8 ist die Standardeinstellung.

iso8859-1 ist auch beliebt für Westeuropa.

z.B.: bytes_obj.decode('iso8859-1')

sehen: Dokumente

2voto

Sushmita Punkte 21

Nachdem Sie alle oben genannten Workarounds ausprobiert haben und der gleiche Fehler weiterhin auftritt, können Sie versuchen, die Datei ein zweites Mal als CSV zu exportieren (falls Sie dies bereits getan haben). Besonders wenn Sie scikit learn verwenden, ist es am besten, den Datensatz als CSV-Datei zu importieren.

Ich habe Stunden damit verbracht, während die Lösung so einfach war. Exportieren Sie die Datei als CSV in das Verzeichnis, in dem Anaconda oder Ihre Klassifikationstools installiert sind, und versuchen Sie es erneut.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X