it-roy-ru.com

ошибка 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.

88
pie

Python пытается преобразовать байтовый массив (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. Попытка декодирования таким образом не произойдет.

101
Alfe

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

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

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

41
Nitish Kumar Pal

Была проблема, похожая на эту, закончилась использованием 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. оттуда это будет расшифровано и отделено линиями.

17
tattmoney76

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

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

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

11
Peter Ogden

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

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

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

base64.b64decode(a) 

вместо

base64.b64decode(a).decode('utf-8')
3
pradeep karunathilaka

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

2
Juan Navarrete

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

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

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

0
Ramineni Ravi Teja

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) . Надеюсь, это будет полезно.

0
Maryam

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

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

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

0
Saif Faidi