it-swarm.com.de

Fehler UnicodeDecodeError: Codec 'utf-8' kann Byte 0xff nicht an Position 0 dekodieren: ungültiges Startbyte

https://github.com/affinelayer/pix2pix-tensorflow/tree/master/tools

Beim Kompilieren von "process.py" auf der oben genannten Site ist ein Fehler aufgetreten.

 python tools/process.py --input_dir data --            operation resize --outp
ut_dir data2/resize
data/0.jpg -> data2/resize/0.png

Rückverfolgung (letzter Anruf zuletzt):

File "tools/process.py", line 235, in <module>
  main()
File "tools/process.py", line 167, in main
  src = load(src_path)
File "tools/process.py", line 113, in load
  contents = open(path).read()
      File"/home/user/anaconda3/envs/tensorflow_2/lib/python3.5/codecs.py", line 321, in decode
  (result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode     byte 0xff in position 0: invalid start byte

Was ist die Ursache des Fehlers? Pythons Version ist 3.5.2.

102
pie

Python versucht, ein Byte-Array (ein bytes, das als utf-8-codierte Zeichenfolge angenommen wird) in eine Unicode-Zeichenfolge (str) zu konvertieren. Dieser Vorgang ist natürlich eine Dekodierung nach utf-8-Regeln. Wenn es dies versucht, stößt es auf eine Bytefolge, die in utf-8-codierten Zeichenfolgen nicht zulässig ist (nämlich dieses 0xff an Position 0).

Da Sie keinen Code angegeben haben, den wir uns ansehen konnten, konnten wir nur den Rest erraten.

Vom Stack-Trace können wir annehmen, dass die auslösende Aktion das Lesen aus einer Datei war (contents = open(path).read()). Ich schlage vor, dies auf folgende Weise umzukodieren:

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

Dass b im Modus-Spezifizierer in open() angibt, dass die Datei als binär behandelt werden soll, sodass contents ein bytes bleibt. Auf diese Weise wird kein Dekodierungsversuch durchgeführt.

114
Alfe

Mit dieser Lösung werden die Zeichen entfernt (ignoriert) und die Zeichenfolge ohne sie zurückgegeben. Verwenden Sie diese Option nur, wenn Sie sie entfernen und nicht konvertieren möchten.

with open(path, encoding="utf8", errors='ignore') as f:

Mit errors='ignore' verlieren Sie nur einige Zeichen. Aber wenn Sie sich nicht darum kümmern, da es sich um zusätzliche Zeichen zu handeln scheint, die aus einer schlechten Formatierung und Programmierung der Clients stammen, die eine Verbindung zu meinem Socket-Server herstellen. Dann ist es eine einfache direkte Lösung. Referenz

47

Hatte ein ähnliches Problem: Wurde mit UTF-16 dekodiert. Mein Code ist unten.

with open(path_to_file,'rb') as f:
    contents = f.read()
contents = contents.rstrip("\n").decode("utf-16")
contents = contents.split("\r\n")

dies würde den Dateiinhalt als Import annehmen, aber den Code im UTF-Format zurückgeben. von dort würde es entschlüsselt und durch Zeilen getrennt werden.

16
tattmoney76

Ich bin auf diesen Thread gestoßen, als derselbe Fehler auftrat. Nach einigen Recherchen kann ich bestätigen, dass dies ein Fehler ist, der auftritt, wenn Sie versuchen, eine UTF-16-Datei mit UTF-8 zu dekodieren.

Bei UTF-16 ist das erste Zeichen (2 Byte in UTF-16) eine Byte Order Mark (BOM) , die als Dekodierungshinweis verwendet wird und nicht als Zeichen in der dekodierten Zeichenfolge erscheint . Dies bedeutet, dass das erste Byte entweder FE oder FF ist und das zweite das andere.

Stark bearbeitet, nachdem ich die richtige Antwort herausgefunden hatte

11
Peter Ogden

Lies (r) die CSV-Datei details.csv und codiere sie mit tf8. Wenn Fehler auftritt Ignorieren der Fehler, wird dies einfach durch den folgenden Code durchgeführt.

with open('details.csv', 'r',encoding="utf8", errors='ignore') as csvDataFile:
    csvReader = csv.DictReader(csvDataFile)
7
Hariharan AR

nur benutzen

base64.b64decode(a) 

anstatt von

base64.b64decode(a).decode('utf-8')

Wenn Sie einen Mac verwenden, prüfen Sie, ob Sie eine versteckte Datei gefunden haben: .DS_Store. Nach dem Entfernen der Datei hat mein Programm funktioniert.

2
Juan Navarrete

Verwenden Sie das Kodierungsformat ISO-8859-1, um das Problem zu beheben.

1

Überprüfen Sie den Pfad der zu lesenden Datei. Mein Code gab mir weiterhin Fehler, bis ich den Pfadnamen in das aktuelle Arbeitsverzeichnis änderte. Der Fehler war:

newchars, decodedbytes = self.decode(data, self.errors)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte
1
Rex131xO

HitHere, sollten Sie die "GoogleNews-vectors-negative300.bin.gz" -Datei zuerst laden und dann mit diesem Befehl in Ubuntu extrahieren: gunzip -k GoogleNews-vectors-negative300.bin.gz. [Manuelles Extrahieren wird niemals empfohlen]. zweitens solltest du diese befehle in pyrhon 3 anwenden:

import gensim model = gensim.models.Word2Vec.load_Word2vec_format('./model/GoogleNews-vectors-negative300.bin', binary=True) . Ich hoffe, es wird nützlich sein.

0
Maryam

wenn Sie Daten von einer seriellen Schnittstelle empfangen, stellen Sie sicher, dass Sie die richtige Baudrate (und die anderen Konfigurationen) verwenden: Dekodierung mit (tf-8), aber die falsche Konfiguration erzeugt den gleichen Fehler

UnicodeDecodeError: Codec 'utf-8' kann Byte 0xff nicht an Position 0 dekodieren: ungültiges Startbyte

um die Konfiguration Ihrer seriellen Schnittstelle unter Linux zu überprüfen, verwenden Sie: stty -F /dev/ttyUSBX -a

0
Saif Faidi