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>

Ответ 1

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

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

file = open(filename, encoding="utf8")

Ответ 2

В качестве дополнения к @LennartRegebro answer:

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

ОБНОВЛЕНИЕ: (скопировано из комментария)

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

  1. Перейдите к ViewShow Console (или Ctrl + ')

enter image description here

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

enter image description here

Ответ 3

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

Ответ 4

В качестве альтернативы, если вам не нужно декодировать файл, например, загрузить файл на веб-сайт, open(filename, 'rb'). r = чтение, b = бинарный

Ответ 5

Для тех, кто работает в Anaconda в Windows, у меня была такая же проблема. Notepad++ помогите мне решить.

Откройте файл в Notepad++. В правом нижнем углу будет показана текущая кодировка файла. В верхнем меню рядом с "View" найдите "Encoding". В "Кодировке" перейдите в "Наборы символов" и там с терпением ищите нужное вам завершение. В моем случае кодировка "Windows-1252" была найдена в разделе "Западноевропейский".