← Все вопросы

UnicodeDecodeError при открытии файла — как читать файл в нужной кодировке?

Задан 31 месяц назад755 просмотров2 ответа
7

Открываю текстовый файл с русскими буквами, а получаю UnicodeDecodeError: 'utf-8' codec can't decode byte .... Файл открывается в блокноте нормально! Почему Python не может его прочитать и как указать кодировку?

2 ответа

10
✓ Принятый ответ — помог автору

UnicodeDecodeError значит: Python пытается прочитать файл в одной кодировке, а он сохранён в другой. Байты не складываются в корректные символы — отсюда ошибка. Чаще всего файл в кодировке Windows (cp1251), а Python по умолчанию (или вы сами) читает как utf-8.

Ошибка:

with open("text.txt", encoding="utf-8") as f:
    data = f.read()   # UnicodeDecodeError, если файл в cp1251

Исправление — указать правильную кодировку:

with open("text.txt", encoding="cp1251") as f:
    data = f.read()

Что делать пошагово:

  1. Всегда явно указывайте encoding при открытии текстовых файлов — не полагайтесь на умолчание ОС.
  2. Если не знаете кодировку — попробуйте по очереди utf-8, cp1251, utf-8-sig (последняя убирает BOM в начале файла).
  3. Если файл нужно просто скопировать/обработать как есть и кодировка неизвестна — откройте в бинарном режиме open(path, "rb") и работайте с байтами.

Лучшая профилактика — пересохранить файл в UTF-8 (в редакторе «Сохранить как → UTF-8») и дальше везде использовать encoding="utf-8".

4

Если строго нужно прочитать «через силу» и потеря отдельных символов не критична, можно добавить errors="replace" или errors="ignore":

open("text.txt", encoding="utf-8", errors="replace")

Но это лечит симптом, а не причину. Правильнее узнать настоящую кодировку файла и указать её.

Ваш ответ

, чтобы ответить на вопрос.