Причины и способы устранения UnicodeDecodeError [Python]
Когда я попытался прочитать набор данных в формате файла 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, что является важной мерой.
обсуждение
Список комментариев
cp949 - корейский, не так ли?
Пожалуйста, используйте cp932.
Цитировать
cp932 | 932, ms932, mskanji, ms-kanji | Японский
cp949 | 949, ms949, uhc | Корейский
Спасибо за совет.Похоже, что эталонный столбец был ошибочно описан как cp949.Я поправил.
Синяк!решено!
Это было полезно