Я пытаюсь получить программу 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>
Если бы кто-нибудь мог мне помочь, чтобы попытаться преодолеть эту проблему, я был бы очень благодарен.
Этот файл не использует кодировку CP1252
. Он использует другую кодировку. Какой из них вам нужно выяснить. Обычными являются Latin-1
и UTF-8
. Поскольку 0x90 фактически не означает ничего в Latin-1
, UTF-8
(где 0x90 является продолжением байта), более вероятно.
Вы указываете кодировку при открытии файла:
file = open(filename, encoding="utf8")
В качестве дополнения к @LennartRegebro ответ:
Если вы не можете сказать, что такое кодировка, и решение выше не работает (это не utf8
), и вы обнаружили, что просто угадываете - есть сетевые инструменты, которые вы можете использовать для определения того, что такое кодировка. Они не идеальны, но обычно отлично работают. После того, как вы выяснили кодировку, вы сможете использовать вышеприведенное решение.
EDIT: (Скопировано из комментария)
В довольно популярном текстовом редакторе Sublime Text
есть команда для отображения кодировки, если она была установлена ...
View
→ Show Console
(или Ctrl + ').
view.encoding()
и надейтесь на лучшее (я не смог получить ничего, кроме Undefined
но, возможно, вам повезет больше...)
:set fileencoding
( по этой ссылке )
view.encoding()
.
Просто добавить в case file = open(filename, encoding="utf8")
не работает try file = open(filename, errors='ignore')
Все хорошо
errors='ignore'