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

274

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

Traceback (most recent call last):
File "SCRIPT LOCATION", line NUMBER, in <module>
text = file.read()
File "C:\Python31\lib\encodings\cp1252.py", line 23, in decode
return codecs.charmap_decode(input,self.errors,decoding_table)[0]
UnicodeDecodeError: 'charmap' codec can't decode byte 0x90 in position 2907500: character   maps to <undefined>

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

Теги:
python-3.x
file-io
unicode
decode

3 ответа

450
Лучший ответ

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

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

file = open(filename, encoding="utf8")
  • 13
    Круто, у меня была эта проблема с некоторым кодом Python 2.7, который я пытался запустить в Python 3.4. Латиноамериканец-1 работал на меня!
  • 4
    Спасибо @ 1vand1ng0 utf-8 не работал для меня, но Latin-1 сделал
Показать ещё 12 комментариев
21

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

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

EDIT: (Скопировано из комментария)

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

  1. Перейдите в меню ViewShow Console (или Ctrl + ').

Изображение 7283

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

Изображение 7284

  • 2
    Некоторые текстовые редакторы также предоставят эту информацию. Я знаю, что с vim вы можете получить это через :set fileencoding ( по этой ссылке )
  • 3
    Sublime Text, также - откройте консоль и введите view.encoding() .
3

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

Все хорошо

  • 0
    Большое спасибо - я дам это попробовать. Есть некоторые недопустимые символы в частях файлов, которые меня не волнуют.
  • 2
    Хорошо работает с errors='ignore'
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню