Здравствуйте! При работе с текстовыми файлами в Python вы могли сталкиваться с ошибками вроде: UnicodeDecodeError: 'charmap' codec can't decode byte 0x98 in position xxx. Или видеть вместо русских букв "кракозябры". Эти проблемы почти всегда связаны с неправильной кодировкой файла .

Как избежать ошибок с кодировкой на Python

Здравствуйте! При работе с текстовыми файлами в Python вы могли сталкиваться с ошибками вроде: UnicodeDecodeError: 'charmap' codec can't decode byte 0x98 in position xxx. Или видеть вместо русских букв "кракозябры". Эти проблемы почти всегда связаны с неправильной кодировкой файла.

В этом материале разберём, что такое кодировка, почему она важна, и как правильно работать с кириллицей в Python.

Кодировка (encoding) — это способ представления символов в виде байтов, которые компьютер может хранить и обрабатывать. Когда вы открываете текстовый файл, программа должна знать, в какой кодировке записаны данные, чтобы правильно их отобразить.

Если кодировка указана неверно, вместо букв могут появиться "кракозябры" или вообще ошибка выполнения.

Распространённые кодировки

Кодировка Описание
utf-8 Современный стандарт, поддерживает все символы Юникода, включая кириллицу
cp1251 Старая Windows-кодировка для русского языка
utf-8-sig То же, что utf-8, но с сигнатурой BOM (часто встречается в Excel)
latin-1 Поддерживает символы латинского алфавита
cp1252 Стандартная кодировка на многих Windows-системах

Как узнать кодировку файла?

  • В Notepad++: меню Encoding → [имя кодировки] покажет текущую.
  • В VS Code: справа внизу — кликните на название кодировки, например UTF-8.

Также можно определить кодировку через Python с помощью библиотеки chardet:

# Установите библиотеку
pip install chardet

import chardet

with open('your_file.txt', 'rb') as f:
result = chardet.detect(f.read(10000))
print(result['encoding']) # Например: 'utf-8' или 'cp1251'

Как правильно открыть файл с нужной кодировкой в Python

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

with open('file.txt', 'r', encoding='utf-8') as f:
content = f.read()

И при записи:

with open('file.txt', 'w', encoding='utf-8') as f:
f.write('Привет, мир!')

Почему Кириллица ломается?

На Windows часто используется кодировка cp1252 по умолчанию. Если в файле есть кириллица, то Python не может её прочитать, потому что:

  • cp1252 не поддерживает русские буквы;
  • Python пытается интерпретировать байты как cp1252, получает ошибку.

Поэтому всегда явно указывайте кодировку при работе с кириллицей:

open('file.txt', 'r', encoding='utf-8')
# или
open('file.txt', 'r', encoding='cp1251')

При чтении/записи JSON, CSV, XML и других форматов также указывайте кодировку:

import json

with open('data.json', 'r', encoding='utf-8') as f:
data = json.load(f)

Если вы хотите освоить Python и автоматизировать рутинные задачи, полезно изучить курс "Написание лайфхаков на Python"