Библиотека encoding
Как работать с кодировками текста — превращать символы в числа и обратно
Подключение библиотеки
Для работы с кодировками необходимо подключить библиотеку encoding:
Зачем нужны кодировки?
Компьютер не понимает буквы — он работает только с числами. Каждому символу соответствует числовой код, но какой именно — зависит от кодировки.
Например, буква «А» (русская заглавная) имеет:
- код 192 в кодировке Windows-1251;
- код 225 в кодировке KOI8-R;
- код 1040 в кодировке UTF-8.
Один и тот же символ — три разных числа. Именно поэтому текст, открытый в неправильной кодировке, превращается в «кракозябры».
Поддерживаемые кодировки
Idyllium поддерживает шесть кодировок:
utf-8— самая распространённая кодировка в интернете, поддерживает все символы Unicode;utf-16— кодировка, используемая в Windows и Java;ascii— базовая 7-битная кодировка (только латиница, цифры и знаки препинания, коды 0–127);windows-1251— кодировка для кириллицы, популярная в старых Windows-программах;koi8-r— ещё одна кириллическая кодировка, популярная в Unix-системах 1990-х;iso-8859-5— стандартная кодировка ISO для кириллицы.
Получить полный список поддерживаемых кодировок можно программно:
Код символа: encoding.char_to_int()
Функция encoding.char_to_int(символ, кодировка) возвращает числовой код символа в указанной кодировке:
Латинская буква 'A' имеет одинаковый код во всех кодировках — это наследие ASCII. А вот кириллица отличается:
Символ по коду: encoding.int_to_char()
Обратная операция — encoding.int_to_char(код, кодировка) — возвращает символ по его числовому коду:
Обратите внимание: код 192 в ASCII и Windows-1251 — это разные символы. Кодировка определяет интерпретацию.
Кодирование строки: encoding.encode()
Функция encoding.encode(текст, кодировка) превращает строку в массив числовых кодов:
Буква 'H' — код 72, буква 'i' — код 105.
Более интересный пример с кириллицей:
Одно и то же слово — совершенно разные числа в разных кодировках.
Декодирование: encoding.decode()
Функция encoding.decode(массив_кодов, кодировка) собирает строку из массива числовых кодов:
Кодировка + декодировка = круговое преобразование:
Ошибки при работе с кодировками
Не все символы представимы во всех кодировках. ASCII, например, поддерживает только коды 0–127:
Аналогично, некоторые экзотические символы не входят в Windows-1251 или KOI8-R. UTF-8 — самая универсальная кодировка, она поддерживает все символы Unicode.
Если указать несуществующую кодировку, программа тоже завершится с ошибкой:
Практическое применение: шифр Цезаря
Кодировки позволяют реализовать простые алгоритмы шифрования. Вот пример шифра Цезаря для латиницы:
Итог
encoding.char_to_int(символ, кодировка)— числовой код символа;encoding.int_to_char(код, кодировка)— символ по числовому коду;encoding.encode(строка, кодировка)— строка → массив кодов;encoding.decode(массив, кодировка)— массив кодов → строка;encoding.list_encodings()— список поддерживаемых кодировок.
Библиотека encoding — это мост между миром текста и миром чисел. Понимание кодировок помогает разобраться, почему «кракозябры» существуют и как с ними бороться.