Вебинары Разобраться в IT Реферальная программа
Программирование Аналитика Дизайн Маркетинг
07 Июл 2023
3 мин
5244

Решение ошибки UnicodeDecodeError: ‘charmap’ codec can’t decode byte X in position Y: character maps to

Одним из распространенных проблем, с которыми сталкиваются новички при работе с Python, является ошибка UnicodeDecodeError. Эта ошибка обычно возникает при попытке

Одним из распространенных проблем, с которыми сталкиваются новички при работе с Python, является ошибка UnicodeDecodeError. Эта ошибка обычно возникает при попытке чтения или записи текстовых файлов.

Освойте Python на курсе от Skypro. Вас ждут 400 часов обучения и практики (достаточно десяти часов в неделю), подготовка проектов для портфолио, индивидуальная проверка домашних заданий и помощь опытных наставников. Получится, даже если у вас нет опыта в IT.

Пример ошибки

Допустим, есть код Python, который пытается прочитать текстовый файл:

with open("file.txt", "r") as file:
    text = file.read()

Но при выполнении этого кода возникает следующая ошибка:

UnicodeDecodeError: 'charmap' codec can't decode byte 0x90 in position 2907500: character maps to <undefined>

Причина ошибки

Эта ошибка возникает из-за того, что Python не может правильно интерпретировать один или несколько байтов в текстовом файле. Все файлы на компьютере хранятся в виде байтов, и для того, чтобы преобразовать эти байты обратно в текст, Python должен знать, какую кодировку использовать.

Курсы по программированию
Помогаем получить новую профессию с гарантией трудоустройства!
Подробнее
Курсы по программированию

Решение ошибки

Чтобы исправить эту ошибку, нужно указать правильную кодировку при открытии файла. Кодировка, которую Python использует по умолчанию, зависит от системы, но часто это ‘utf-8’ или ‘cp1252’.

Если кодировка файла отличается от кодировки по умолчанию, Python не сможет правильно прочитать файл и выдаст ошибку UnicodeDecodeError. В этом случае нужно указать правильную кодировку вручную. Например, если файл был сохранен в кодировке ‘utf-8’, код для чтения файла должен выглядеть так:

with open("file.txt", "r", encoding="utf-8") as file:
    text = file.read()

Если неизвестно, в какой кодировке сохранен файл, можно попробовать открыть его в разных кодировках, пока не найдется подходящая. Кроме того, существуют инструменты и библиотеки Python, которые могут помочь определить кодировку файла.

Важно помнить, что некоторые байты могут не соответствовать ни одному символу в выбранной кодировке. В этом случае Python снова выдаст ошибку UnicodeDecodeError. Чтобы избежать этого, можно добавить аргумент errors=’ignore’ при открытии файла. Это заставит Python пропустить любые неправильные байты:

with open("file.txt", "r", encoding="utf-8", errors='ignore') as file:
    text = file.read()

На курсе Skypro «Python-разработчик» освоите основные инструменты программирования, получите опыт на реальных проектах и сможете стартовать в профессии уверенным новичком. Преподаватели — практикующие программисты с большим опытом, а в центре карьеры помогут составить цепляющее резюме и подготовиться к собеседованию.

Однако стоит отметить, что использование errors=’ignore’ может привести к потере данных, поэтому этот метод следует использовать с осторожностью.

Тест на профориентацию
За 10 минут узнайте, как ваш опыт пригодиться в IT индустрии
Подробнее
Тест на профориентацию

Добавить комментарий