Документация
Уроки Открыть IDE
На главную
Урок 21

Библиотека 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 для кириллицы.

Получить полный список поддерживаемых кодировок можно программно:

utf-8 utf-16 ascii windows-1251 iso-8859-5 koi8-r

Код символа: encoding.char_to_int()

Функция encoding.char_to_int(символ, кодировка) возвращает числовой код символа в указанной кодировке:

Символ 'A' в UTF-8: 65 Символ 'A' в ASCII: 65

Латинская буква 'A' имеет одинаковый код во всех кодировках — это наследие ASCII. А вот кириллица отличается:

'Я' в Windows-1251: 223 'Я' в KOI8-R: 241 'Я' в UTF-8: 1071

Символ по коду: encoding.int_to_char()

Обратная операция — encoding.int_to_char(код, кодировка) — возвращает символ по его числовому коду:

Код 65 в ASCII: A Код 192 в Windows-1251: А

Обратите внимание: код 192 в ASCII и Windows-1251 — это разные символы. Кодировка определяет интерпретацию.

Кодирование строки: encoding.encode()

Функция encoding.encode(текст, кодировка) превращает строку в массив числовых кодов:

[72, 105]

Буква 'H' — код 72, буква 'i' — код 105.

Более интересный пример с кириллицей:

Windows-1251: [168, 230] KOI8-R: [179, 214]

Одно и то же слово — совершенно разные числа в разных кодировках.

Декодирование: encoding.decode()

Функция encoding.decode(массив_кодов, кодировка) собирает строку из массива числовых кодов:

Hello

Кодировка + декодировка = круговое преобразование:

Исходник: Привет Коды: [207, 240, 232, 226, 229, 242] Обратно: Привет

Ошибки при работе с кодировками

Не все символы представимы во всех кодировках. ASCII, например, поддерживает только коды 0–127:

Аналогично, некоторые экзотические символы не входят в Windows-1251 или KOI8-R. UTF-8 — самая универсальная кодировка, она поддерживает все символы Unicode.

Если указать несуществующую кодировку, программа тоже завершится с ошибкой:

Практическое применение: шифр Цезаря

Кодировки позволяют реализовать простые алгоритмы шифрования. Вот пример шифра Цезаря для латиницы:

Исходное: Hello World Зашифрованное: Khoor Zruog

Итог

  • encoding.char_to_int(символ, кодировка) — числовой код символа;
  • encoding.int_to_char(код, кодировка) — символ по числовому коду;
  • encoding.encode(строка, кодировка) — строка → массив кодов;
  • encoding.decode(массив, кодировка) — массив кодов → строка;
  • encoding.list_encodings() — список поддерживаемых кодировок.

Библиотека encoding — это мост между миром текста и миром чисел. Понимание кодировок помогает разобраться, почему «кракозябры» существуют и как с ними бороться.