UnicodeDecodeError: кодек 'charmap' не может декодировать байт X в позиции Y: символ отображается на <undefined> - PullRequest
390 голосов
/ 10 февраля 2012

Я пытаюсь заставить программу на 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>

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

Ответы [ 4 ]

671 голосов
/ 10 февраля 2012

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

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

file = open(filename, encoding="utf8")
31 голосов
/ 22 марта 2016

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

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

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

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

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

enter image description here

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

enter image description here

28 голосов
/ 06 июня 2018

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

0 голосов
/ 09 июля 2019

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

...