it-swarm.com.ru

UnicodeDecodeError: кодек 'charmap' не может декодировать байт X в позиции Y: символ отображается на <undefined>

Я пытаюсь заставить программу Python 3 выполнять некоторые манипуляции с текстовым файлом, заполненным информацией. Однако при попытке прочитать файл я получаю следующую ошибку:

Traceback (последний вызов был последним):
Файл "SCRIPT LOCATION", строка NUMBER, в
text = file.read()
Файл "C:\Python31\lib\encodings\cp1252.py", строка 23, в декодировании
return codecs.charmap_decode(input,self.errors,decoding_table)[0]
UnicodeDecodeError: кодек 'charmap' не может декодировать байт 0x90 в позиции 2907500: символ отображается на <undefined>

Если бы кто-нибудь мог мне помочь, чтобы попытаться обойти эту проблему, я был бы очень признателен.

376
Eden Crow

В рассматриваемом файле не используется кодировка CP1252. Он использует другую кодировку. Какой из них вы должны выяснить самостоятельно. Наиболее распространенными являются Latin-1 и UTF-8. Поскольку x9 на самом деле ничего не значит в Latin-1, UTF-8 (где x9 - это байт продолжения) более вероятно.

Вы указываете кодировку при открытии файла:

file = open(filename, encoding="utf8")
649
Lennart Regebro

Как продолжение ответа @LennartRegebro:

Если вы не можете сказать, что это за кодировка, и приведенное выше решение не работает (это не utf8), и вы просто догадались - есть онлайн-инструменты , которые вы могли бы использовать, чтобы определить, что это за кодировка. Они не идеальны, но обычно работают просто отлично. После того, как вы выяснили кодировку, вы сможете использовать решение выше.

РЕДАКТИРОВАТЬ: (скопировано из комментария)

Довольно популярный текстовый редактор Sublime Text имеет команду для отображения кодировки, если она была установлена ​​...

  1. Перейдите к View -> Show Console (или Ctrl+`)

enter image description here

  1. Введите в поле внизу view.encoding() и надейтесь на лучшее (мне не удалось получить ничего, кроме Undefined, но, возможно, вам повезет больше ...)

enter image description here

31
Matas Vaitkevicius

Просто добавить, если file = open(filename, encoding="utf8") не работает, попробуйте file = open(filename, errors='ignore')

27
Declan Nnadozie