KeyError: "undefined character name 'E WITH ACUTE, LATIN SMALL LETTER'"
Имена, перечисленные в списке Unicode Character Name Index, были переформатирова-
ны для удобства отображения. Для того чтобы преобразовать их в настоящие имена сим-
волов Unicode (которые используются в Python), удалите запятую и переместите ту часть
имени, которая находится после нее, в самое начало. Соответственно, в нашем примере
E WITH ACUTE, LATIN SMALL LETTER нужно изменить на LATIN SMALL LETTER E WITH
ACUTE:
>>> unicodedata.lookup(‘LATIN SMALL LETTER E WITH ACUTE’)
'é'
Теперь мы можем использовать символ «e ' » как с помощью кода, так и с помощью
имени:
>>> place = 'caf\u00e9'
>>> place
'café'
>>> place = 'caf\N{LATIN SMALL LETTER E WITH ACUTE}'
>>> place
'café'
В предыдущем сниппете вы вставили символ «e ' » непосредственно в строку,
но мы также можем собрать строку из составляющих:
>>> u_umlaut = '\N{LATIN SMALL LETTER U WITH DIAERESIS}'
>>> u_umlaut
'ú'
>>> drink = 'Gew' + u_umlaut + 'rztraminer'
>>> print('Now I can finally have my', drink, 'in a', place)
Now I can finally have my Gewúrztraminer in a café
Строковая функция len считает количество символов в кодировке Unicode,
а не байты:
>>> len('$')
1
>>> len('\U0001f47b')
1
184
Глава 7. Работаем с данными профессионально
Кодирование и декодирование
с помощью кодировки UTF-8
Вам не нужно волноваться о том, как Python хранит каждый символ Unicode,
ко гда вы выполняете обычную обработку строки.
Но когда вы обмениваетесь данными с внешним миром, вам может понадобить-
ся следующее:
способ закодировать строку с помощью байтов;
способ декодировать байты обратно в строку.
Если бы в Unicode было менее 64 000 символов, мы могли бы хранить ID каж-
дого из них в двух байтах. К сожалению, символов больше. Мы могли бы кодировать
каждый ID с помощью трех или четырех байтов, но это увеличило бы объем памя-
ти и дискового пространства, необходимый для обычных текстовых строк, в три
или четыре раза.
Кен Томпсон (Ken Thompson) и Роб Пайк (Rob Pike), чьи имена будут знакомы
разработчикам на Unix, разработали UTF-8 — динамическую схему кодирования —
однажды вечером на салфетке в одной из столовых Нью-Джерси. Она использует