https://github.com/affinelayer/pix2pix-tensorflow/tree/master/tools
Wystąpił błąd podczas kompilowania pliku „process.py” w powyższej witrynie.
python tools/process.py --input_dir data -- operation resize --outp
ut_dir data2/resize
data/0.jpg -> data2/resize/0.png
Traceback (ostatnie ostatnie połączenie):
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
Jaka jest przyczyna błędu? Wersja Pythona to 3.5.2.
źródło
rb
(myślałem, że kolejność nie ma znaczenia, ale wydaje się, że jest, przynajmniej w niektórych systemach / wersjach). Odpowiednio zmieniłem odpowiedź.byte 0xff in position 0
może również oznaczać, że plik jest zakodowany w UTF-16, a następnie można zrobićwith open(path, encoding='utf-16') as f:
zamiast0xff
na pozycji nie ma żadnego znaku0
? I to jestUTF-8
zakodowane.'\xFF'
znak zostanie zakodowany w UTF-8 jako'\xC3\xBF'
. UTF-8 koduje wszystkie znaki za pomocą zestawu MSB przy użyciu dwóch znaków. (Zobacz dane wyjścioweprintf "\xff" | iconv -f latin1 -t utf-8 | xxd
w powłoce). Dosłowne słowo'\xFF'
na początku łańcucha zakodowanego w UTF-8 jest błędem kodowania (można go nazwać błędem składni w terminologii UTF-8).Użyj tego rozwiązania, aby usunąć (zignorować) znaki i zwrócić ciąg bez nich. Używaj tego tylko wtedy, gdy potrzebujesz ich rozebrać, a nie przerobić.
Korzystanie
errors='ignore'
Po prostu stracisz kilka znaków. ale jeśli nie przejmujesz się nimi, ponieważ wydają się być dodatkowymi znakami pochodzącymi z niewłaściwego formatowania i programowania klientów łączących się z moim serwerem gniazd. Wtedy jest to łatwe i bezpośrednie rozwiązanie. odniesienieźródło
contents = contents.decode('utf-8', 'ignore')
Źródło: docs.python.org/3/howto/unicode.html#the-string-typeMiałem problem podobny do tego, Skończyło się na używaniu UTF-16 do dekodowania. mój kod jest poniżej.
spowoduje to pobranie zawartości pliku jako importu, ale zwróci kod w formacie UTF. stamtąd był dekodowany i oddzielany liniami.
źródło
with open(path, encoding='utf-16') as f
TypeError: an integer is required (got type str)
. Czemu? Oba pliki są binarne i czytane jakorb
.encoding
ma sens tylko podczas czytania tekstu. Usuń „b” z argumentu mode i spróbuj ponownie. Przeczytaj więcej w dokumentacji: docs.python.org/3/library/functions.html#openAby rozwiązać problem, użyj formatu kodowania ISO-8859-1 .
źródło
Natknąłem się na ten wątek, gdy cierpię na ten sam błąd, po przeprowadzeniu badań, które mogę potwierdzić, jest to błąd, który pojawia się podczas próby dekodowania pliku UTF-16 za pomocą UTF-8.
W przypadku UTF-16 pierwszy znak (2 bajty w UTF-16) to Byte Order Mark (BOM) , który jest używany jako wskazówka dekodowania i nie pojawia się jako znak w dekodowanym ciągu. Oznacza to, że pierwszy bajt będzie FE lub FF, a drugi to drugi.
Mocno zredagowane po tym, jak znalazłem prawdziwą odpowiedź
źródło
tylko do użytku
zamiast
źródło
Jeśli używasz komputera Mac, sprawdź, czy nie masz ukrytego pliku, .DS_Store. Po usunięciu pliku mój program działał.
źródło
Sprawdź ścieżkę do pliku do odczytania. Mój kod ciągle dawał mi błędy, dopóki nie zmieniłem nazwy ścieżki na obecny katalog roboczy. Błąd:
źródło
jeśli otrzymujesz dane z portu szeregowego, upewnij się, że używasz właściwej szybkości transmisji (i innych konfiguracji): dekodowanie przy użyciu ( utf-8 ), ale zła konfiguracja wygeneruje ten sam błąd
aby sprawdzić konfigurację portu szeregowego w systemie Linux użyj:
stty -F /dev/ttyUSBX -a
źródło
Oznacza to po prostu, że do odczytania pliku wybrano niewłaściwe kodowanie.
Na komputerze Mac użyj,
file -I file.txt
aby znaleźć prawidłowe kodowanie. W systemie Linux użyjfile -i file.txt
.źródło
Mam ten sam problem podczas przetwarzania pliku wygenerowanego z Linuksa. Okazuje się, że było to związane z plikami zawierającymi znaki zapytania.
źródło
Miałem podobny problem.
Rozwiązany przez:
Jednak miałem inny problem. Niektóre pliki html (w moim przypadku) nie były w formacie utf-8, więc otrzymałem podobny błąd. Kiedy wykluczyłem te pliki html, wszystko działało gładko.
Więc oprócz naprawiania kodu, sprawdź także pliki, z których czytasz, może rzeczywiście jest tam niezgodność.
źródło
Jeśli to możliwe, otwórz plik w edytorze tekstu i spróbuj zmienić kodowanie na UTF-8. W przeciwnym razie zrób to programowo na poziomie systemu operacyjnego.
źródło
Mam podobny problem. Próbuję uruchomić przykład w tensorflow / models / objective_detection i otrzymałem ten sam komunikat. Spróbuj zmienić Python3 na Python2
źródło