Причины и способы устранения UnicodeDecodeError [Python]

2019 год 6 месяц 5 день

Когда я попытался прочитать набор данных в формате файла csv с помощью pandas, я сразу же обнаружил ошибку «UnicodeDecodeError: кодек 'utf-8' не может декодировать байт 0x91 в позиции 1: недопустимый начальный байт». Сделайте заметку.

содержание ошибки

Прочтите файл csv с помощью pd.read_csv.Потом ...

импортировать панды как pd df = pd.read_csv ('data.csv')

>> Юникодекодееррор: кодек 'utf-8' не может декодировать байт 0x91 в позиции 1: недопустимый начальный байт

Я получил ошибку декодирования Unicode (преобразование кода символа в символ).
Кстати, преобразование символов в коды символов называется кодировкой.

причина

Внутри персонального компьютера символы не распознаются как есть, а обрабатываются как числа (коды символов), заранее присвоенные каждому символу.

Существует много типов кодов символов в зависимости от языка и способов присвоения чисел. UTF-8 - один из методов кодирования Unicode, установленный в качестве единого стандарта мирового стандарта, поэтому его можно использовать на любом языке.
Однако UTF-8 тоже не кажется идеальным (Википедия:Проблемы с Unicode в японской среде)

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

解決 策

При чтении с помощью read_csv () укажите формат кодировки от аргумента до кода японского символа (shift_jis и т. Д.).

df = pd.read_csv ('data.csv', encoding = 'shift_jis')

Я смог его успешно прочитать.

Другой формат кодирования, совместимый с японским

Кстати, есть несколько кодов символов, которые могут выражать японский язык, и Python стандартно реализует следующие. (Справка:Список стандартных кодировок Python )

  • cp932
  • euc_jp, euc_jis_2004, euc_jisx0213
  • iso2022_jp, iso2022_jp_1, iso2022_jp_2, iso2022_jp_3
  • iso2022_jp_2004, iso2022_jp_2ext
  • shift_jis, shift_jis _2004, shift_jisx0213

Однако у меня сложилось впечатление, что его можно хорошо прочитать с помощью shift_jis или cp932, что является важной мерой.