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?

394voto

MSalty Punkte 4254

Wenn Sie beim Versuch, eine CSV-Datei zu lesen, diesen Fehler erhalten, ermöglicht es Ihnen die read_csv()-Funktion von pandas, das Encoding festzulegen:

import pandas as pd
data = pd.read_csv(filename, encoding='unicode_escape')

184voto

Soumyaansh Punkte 8048

Nachdem open-Funktion hat standardmäßig das io-Attribut 'r' als nur lesend. Dies kann auf 'rb' als lesen binär gesetzt werden.

Versuchen Sie den folgenden Code-Schnipsel:

with open(path, 'rb') as f:
  text = f.read()

121voto

Santosh Ghimire Punkte 3057

Der Fehler tritt auf, weil es ein nicht-ascii-Zeichen im Wörterbuch gibt und es nicht codiert/decodiert werden kann. Ein einfacher Weg, um diesen Fehler zu vermeiden, besteht darin, solche Zeichen mit der encode()-Funktion wie folgt zu kodieren (wenn a der String mit dem nicht-ascii-Zeichen ist):

a.encode('utf-8').strip()

53voto

JCF Punkte 604

Ihr String enthält ein nicht ascii kodiertes Zeichen.

Es kann sein, dass Sie nicht mit utf-8 dekodieren können, wenn Sie andere Kodierungen in Ihrem Code verwendet haben. Zum Beispiel:

>>> 'mein seltsames Zeichen \x96'.decode('utf-8')
Traceback (most recent call last):
  File "", line 1, in 
  File "C:\Python27\lib\encodings\utf_8.py", line 16, in decode
    return codecs.utf_8_decode(input, errors, True)
UnicodeDecodeError: 'utf8' codec can't decode byte 0x96 in position 19: invalid start byte

In diesem Fall ist die Kodierung windows-1252, daher müssen Sie Folgendes tun:

>>> 'mein seltsames Zeichen \x96'.decode('windows-1252')
u'mein seltsames Zeichen \u2013'

Jetzt, da Sie Unicode haben, können Sie sicher in utf-8 kodieren.

40voto

Krishna prasad.m Punkte 409

Beim Lesen von csv habe ich eine Kodierungsmethode hinzugefügt:

import pandas as pd
dataset = pd.read_csv('sample_data.csv', header= 0,
                        encoding= 'unicode_escape')

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