Я пытаюсь заставить программу на 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 - байт продолжения), более вероятно.Вы указываете кодировку при открытии файла:
источник
io
модуль:io.open(filename,encoding="utf8")
filename = "C:\Report.txt" with open(filename,encoding ="utf8") as my_file: text = my_file.read() print(text)
даже после использования я получаю ту же ошибку. Я также пробовал с другой кодировкой, но все тщетно. В этом коде я тоже используюfrom geotext import GeoText
. Пожалуйста, предложите решение.Просто добавить в случае, если
file = open(filename, encoding="utf8")
не работает, попробуйтеfile = open(filename, errors='ignore')
источник
Как продолжение ответа @ LennartRegebro :
Если вы не можете сказать, какую кодировку использует ваш файл, и приведенное выше решение не работает (это не так
utf8
), и вы просто догадались - есть онлайн-инструменты, которые вы можете использовать, чтобы определить, что это за кодировка. Они не идеальны, но обычно работают просто отлично. После того, как вы выясните кодировку, вы сможете использовать решение выше.РЕДАКТИРОВАТЬ: (скопировано из комментария)
У довольно популярного текстового редактора
Sublime Text
есть команда для отображения кодировки, если она была установлена ...View
->Show Console
(или Ctrl+ `)view.encoding()
и надейтесь на лучшее (я ничего не смог получить,Undefined
но, возможно, вам повезет больше ...)источник
:set fileencoding
( по этой ссылке )view.encoding()
.Кроме того, если вам не нужно декодировать файл, например, загрузка файла на веб - сайт,
open(filename, 'rb')
. r = чтение, b = двоичноеисточник
TLDR? Пытаться:
file = open(filename, encoding='cp437)
Почему? Когда одно использование:
Python предполагает, что файл использует ту же кодовую страницу, что и текущая среда (cp1252 в случае открытия поста), и пытается декодировать его в свой собственный UTF-8 по умолчанию. Если файл содержит символы значений, не определенных в этой кодовой странице (например, 0x90), мы получаем UnicodeDecodeError. Иногда мы не знаем кодировку файла, иногда кодировка файла может не обрабатываться Python (например, cp790), иногда файл может содержать смешанные кодировки.
Если такие символы не нужны, можно заменить их на вопросительные знаки:
Другой обходной путь должен использовать:
Затем символы остаются нетронутыми, но другие ошибки также будут маскироваться.
Неплохое решение - указать кодировку, но не кодировку (например, cp1252), а ту, в которой определены ВСЕ символы (например, cp437):
Кодовая страница 437 - это оригинальная кодировка DOS. Все коды определены, поэтому при чтении файла не возникает ошибок, ошибки не маскируются, символы сохраняются (не оставлены без изменений, но различимы).
источник
Для тех, кто работает в Anaconda в Windows, у меня была такая же проблема. Блокнот ++ помогите мне решить.
Откройте файл в Notepad ++. В правом нижнем углу будет показана текущая кодировка файла. В верхнем меню рядом с «View» найдите «Encoding». В «Кодировке» перейдите в «Наборы символов» и там с терпением ищите нужное вам завершение. В моем случае кодировка «Windows-1252» была найдена в разделе «Западноевропейский».
источник
Хватит тратить свое время, просто добавьте следующее
encoding="cp437"
иerrors='ignore'
к своему коду как в режиме чтения, так и записи:счастливого пути
источник
для меня изменение кодировки символов Mysql так же, как мой код, помогло разобраться в решении. `photo = open ('pic3.png', encoding = latin1), сильный текст
источник