Error UnicodeDecodeError: кодек "utf-8" не может декодировать байт 0xff в позиции 0: недопустимый стартовый байт

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

При компиляции "process.py" на указанном сайте произошла ошибка.

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

Traceback (последний последний вызов):

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

В чем причина ошибки? Версия Python - 3.5.2.

Ответ 1

Python пытается преобразовать байтовый массив (a bytes, который предполагается, что он является строкой, кодированной utf-8), в строку unicode (str). Этот процесс, конечно, является расшифровкой в ​​соответствии с правилами utf-8. Когда он пытается это сделать, он встречает последовательность байтов, которая не допускается в строках, закодированных в utf-8 (а именно, это 0xff в позиции 0).

Поскольку вы не указали какой-либо код, на который мы могли бы обратить внимание, мы можем только догадываться об остальном.

Из трассировки стека можно предположить, что инициирующим действием было чтение из файла (contents = open(path).read()). Я предлагаю перекодировать это так:

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

То, что b в спецификаторе режима в open() указывает, что файл должен рассматриваться как двоичный, поэтому contents останется bytes. Никакая попытка декодирования не будет таким образом.

Ответ 2

Используйте это решение, оно удалит (проигнорирует) символы и вернет строку без них. Используйте это только если вам нужно раздеть их, а не конвертировать.

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

Используя errors='ignore' вы просто потеряете несколько символов. но если вы не заботитесь о них, так как они кажутся лишними символами, происходящими из-за неправильного форматирования и программирования клиентов, подключающихся к моему серверу сокетов. Тогда это простое прямое решение. ссылка

Ответ 3

Была проблема, подобная этой, закончена с использованием UTF-16 для декодирования. мой код ниже.

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

это приведет к тому, что содержимое файла будет импортировано, но оно вернет код в формате UTF. оттуда он будет декодирован и разделен линиями.

Ответ 4

Я сталкивался с этой темой, когда сталкивался с той же ошибкой, после некоторого исследования, которое я могу подтвердить, эта ошибка возникает, когда вы пытаетесь декодировать файл UTF-16 с помощью UTF-8.

В UTF-16 первый символ (2 байта в UTF-16) представляет собой метку порядка байтов (BOM), которая используется в качестве подсказки декодирования и не отображается как символ в декодированной строке. Это означает, что первый байт будет либо FE, либо FF, а второй - другим.

Сильно отредактировано после того, как я узнал реальный ответ

Ответ 5

Прочитайте (r) файл CSV details.csv и закодируйте с помощью utf8. если ошибка игнорировать ошибку, Это просто сделать с помощью следующего кода.

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

Ответ 6

использовать только

base64.b64decode(a) 

вместо

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

Ответ 7

Если вы используете Mac, проверьте наличие скрытого файла .DS_Store. После удаления файла моя программа сработала.

Ответ 8

Проверьте путь к файлу, который нужно прочитать. Мой код продолжал давать мне ошибки, пока я не изменил имя пути для представления рабочего каталога. Ошибка:

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

Ответ 9

HitHere, вы должны сначала загрузить файл "GoogleNews-vectors-positive300.bin.gz", а затем извлечь его с помощью этой команды в Ubuntu: gunzip -k GoogleNews-vectors-positive300.bin.gz. [извлечение вручную никогда не рекомендуется]. во-вторых, вы должны применить эти команды в pyrhon 3:

import gensim model = gensim.models.Word2Vec.load_word2vec_format('./model/GoogleNews-vectors-negative300.bin', binary=True). Надеюсь это будет полезно.

Ответ 10

если вы получаете данные от последовательного порта, убедитесь, что вы используете правильную скорость передачи данных (и другие конфигурации): декодирование с использованием (utf-8), но неправильная конфигурация вызовет ту же ошибку

UnicodeDecodeError: кодек "utf-8" не может декодировать байт 0xff в позиции 0: недопустимый начальный байт

чтобы проверить конфигурацию последовательного порта в Linux, используйте: stty -F/dev/ttyUSBX -a

Ответ 11

Используйте формат кодировки ISO-8859-1 для решения проблемы.

Ответ 12

У меня аналогичная проблема. Я пытаюсь запустить пример в tensorflow/models/object_detection и встретить одно и то же сообщение. Попробуйте изменить Python3 на Python2

Ответ 13

Если возможно, откройте файл в текстовом редакторе и попробуйте изменить кодировку на UTF-8. В противном случае сделайте это программно на уровне ОС.