Простой Python. современный стиль программирования - читать онлайн бесплатно полную версию книги . Страница 138

для символа Unicode от одного до четырех байтов:

 один байт для ASCII;

 два байта для большинства языков, основанных на латинице (но не кирил-

лице);

 три байта для остальных простых языков;

 четыре байта для остальных языков, включая некоторые азиатские языки и сим-

волы.

UTF-8 — это стандартная текстовая кодировка для Python, Linux и HTML.

Она охватывает множество символов, работает быстро и хорошо. Если вы исполь-

зуете кодировку UTF-8 в своем коде, жизнь станет гораздо проще, чем в том случае,

если будете скакать от одной кодировки к другой.

Если вы создаете строку Python путем копирования символов из другого источника вроде

веб-страницы и их вставки, убедитесь, что источник был закодирован с помощью UTF-8.

Очень часто может оказаться, что текст был зашифрован с помощью кодировок Latin-1 или

Windows 1252, что при копировании в строку Python вызовет генерацию исключений из-за

некорректной последовательности байтов.

Кодирование

Вы кодируете строку байтами. Первый аргумент строковой функции encode() — это

имя кодировки. Возможные варианты представлены в табл. 7.1.

Текстовые строки

185

Таблица 7.1. Кодировки

ascii

Старая добрая семибитная кодировка ASCII

utf-8

Восьмибитная кодировка переменной длины, самый предпочтительный

вариант в большинстве случаев

latin-1

Также известна как ISO 8859-1

cp-1252

Стандартная кодировка Windows

unicode-escape

Буквенный формат Python Unicode, выглядит как \uxxxx или \Uxxxxxxxx

С помощью кодировки UTF-8 вы можете закодировать все что угодно. При-

своим строку Unicode '\u2603' переменной snowman:

>>> snowman = '\u2603'

snowman — это строка Python Unicode, содержащая один символ независимо от

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

>>> len(snowman)

1

Теперь закодируем этот символ последовательностью байтов:

>>> ds = snowman.encode('utf-8')

Как я упоминал ранее, кодировка UTF-8 имеет переменную длину. В этом случае

было использовано три байта для того, чтобы закодировать один символ snowman:

>>> len(ds)

3

>>> ds

b'\xe2\x98\x83'

Функция len() возвращает число байтов (3), поскольку ds является перемен-

ной bytes.