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
есть команда для отображения кодировки, если она была установлена ...
- Перейдите к
View
→ Show Console
(или Ctrl + ')
![enter image description here]()
-
Введите в поле внизу
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" была найдена в разделе "Западноевропейский".