https://github.com/affinelayer/pix2pix-tensorflow/tree/master/tools
Beim Kompilieren von "process.py" auf der obigen 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
Traceback (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.
quelle
rb
(ich dachte, Reihenfolge sei nicht wichtig, aber es scheint zumindest in einigen Systemen / Versionen zu sein). Ich habe meine Antwort entsprechend geändert.byte 0xff in position 0
könnte auch bedeuten, dass die Datei in UTF-16 codiert ist, dann können Siewith open(path, encoding='utf-16') as f:
stattdessen0xff
Charakter an der Position befindet0
? Und es istUTF-8
verschlüsselt.'\xFF'
Zeichen wird in UTF-8 als codiert'\xC3\xBF'
. UTF-8 codiert alle Zeichen mit einem festgelegten MSB mit zwei Zeichen. (Siehe die Ausgabe vonprintf "\xff" | iconv -f latin1 -t utf-8 | xxd
in einer Shell.) Ein Wortlaut'\xFF'
am Anfang einer UTF-8-codierten Zeichenfolge ist ein Codierungsfehler (könnte in Bezug auf UTF-8 als Syntaxfehler bezeichnet werden).Verwenden Sie diese Lösung, um die Zeichen zu entfernen (zu ignorieren) und die Zeichenfolge ohne sie zurückzugeben. Verwenden Sie diese Option nur, wenn Sie sie entfernen und nicht konvertieren möchten.
Verwenden
errors='ignore'
Sie verlieren nur einige Zeichen. Aber wenn Sie sich nicht für sie interessieren, da es sich anscheinend um zusätzliche Zeichen handelt, die auf eine schlechte Formatierung und Programmierung der Clients zurückzuführen sind, die eine Verbindung zu meinem Socket-Server herstellen. Dann ist es eine einfache direkte Lösung. Referenzquelle
contents = contents.decode('utf-8', 'ignore')
Quelle: docs.python.org/3/howto/unicode.html#the-string-typeHatte ein ähnliches Problem, endete mit UTF-16 zum Dekodieren. Mein Code ist unten.
Dies würde den Dateiinhalt als Import nehmen, aber den Code im UTF-Format zurückgeben. von dort würde es entschlüsselt und durch Linien getrennt werden.
quelle
with open(path, encoding='utf-16') as f
TypeError: an integer is required (got type str)
. Warum? Beide Dateien sind binär und werden als gelesenrb
.encoding
Parameter ist nur beim Lesen von Text sinnvoll. Löschen Sie das 'b' aus dem Modusargument und versuchen Sie es erneut. Lesen Sie mehr in den Dokumenten: docs.python.org/3/library/functions.html#openVerwenden Sie das Codierungsformat ISO-8859-1 , um das Problem zu beheben.
quelle
Ich bin auf diesen Thread gestoßen, als ich denselben Fehler hatte. 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) ein Byte Order Mark (BOM) , das als Dekodierungshinweis verwendet wird und nicht als Zeichen in der dekodierten Zeichenfolge angezeigt wird. Dies bedeutet, dass das erste Byte entweder FE oder FF und das zweite das andere Byte ist.
Stark bearbeitet, nachdem ich die richtige Antwort herausgefunden hatte
quelle
nur benutzen
anstatt
quelle
Wenn Sie auf einem Mac arbeiten, überprüfen Sie, ob Sie nach einer versteckten Datei suchen .DS_Store. Nach dem Entfernen der Datei funktionierte mein Programm.
quelle
Ü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:
quelle
Wenn Sie Daten von einer seriellen Schnittstelle empfangen, stellen Sie sicher, dass Sie die richtige Baudrate (und die anderen Konfigurationen) verwenden: Die Dekodierung mit ( utf-8 ), aber die falsche Konfiguration erzeugt denselben Fehler
So überprüfen Sie Ihre Konfiguration der seriellen Schnittstelle unter Linux:
stty -F /dev/ttyUSBX -a
quelle
Es bedeutet einfach, dass man die falsche Codierung gewählt hat, um die Datei zu lesen.
Verwenden Sie
file -I file.txt
auf dem Mac, um die richtige Codierung zu finden. Verwenden Sie unter Linuxfile -i file.txt
.quelle
Ich habe das gleiche Problem bei der Verarbeitung einer von Linux generierten Datei. Es stellte sich heraus, dass es sich um Dateien handelte, die Fragezeichen enthielten.
quelle
Ich hatte ein ähnliches Problem.
Gelöst von:
Ich hatte jedoch ein anderes Problem. Einige HTML-Dateien (in meinem Fall) waren nicht utf-8, daher habe ich einen ähnlichen Fehler erhalten. Als ich diese HTML-Dateien ausgeschlossen habe, hat alles reibungslos funktioniert.
Überprüfen Sie also, abgesehen vom Korrigieren des Codes, auch die Dateien, aus denen Sie lesen. Möglicherweise liegt tatsächlich eine Inkompatibilität vor.
quelle
Öffnen Sie die Datei nach Möglichkeit in einem Texteditor und versuchen Sie, die Codierung in UTF-8 zu ändern. Andernfalls machen Sie es programmgesteuert auf Betriebssystemebene.
quelle
Ich habe ein ähnliches Problem. Ich versuche ein Beispiel in tensorflow / models / objectivdetection auszuführen und habe dieselbe Nachricht erhalten. Versuchen Sie, Python3 in Python2 zu ändern
quelle