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

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

Как избежать ошибок с кодировкой на 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»

    Источник

    НЕТ КОММЕНТАРИЕВ

    Оставить комментарий