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

 name() принимает символ Unicode и возвращает его имя в верхнем регистре.

182

Глава 7. Работаем с данными профессионально

В следующем примере мы напишем проверочную функцию, которая принима-

ет символ Unicode, ищет его имя, а затем ищет символ, соответствующий полу-

ченному имени (он должен совпасть с оригинальным):

>>> def unicode_test(value):

... import unicodedata

... name = unicodedata.name(value)

... value2 = unicodedata.lookup(name)

... print('value="%s", name="%s", value2="%s"' % (value, name, value2))

...

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

ASCII:

>>> unicode_test('A')

value="A", name="LATIN CAPITAL LETTER A", value2="A"

Знак препинания, доступный в ASCII:

>>> unicode_test('$')

value="$", name="DOLLAR SIGN", value2="$"

Символ валюты из Unicode:

>>> unicode_test('\u00a2')

value="¢", name="CENT SIGN", value2="¢"

Еще один символ валюты из Unicode:

>>> unicode_test('\u20ac')

value="€", name="EURO SIGN", value2="€"

Единственная проблема, с которой вы можете столкнуться, — это ограничения,

накладываемые шрифтом. Ни в одном шрифте нет символов для всех символов

Unicode, вместо них будет отображен символ-заполнитель. Например, так выглядит

символ Unicode SNOWMAN, содержащийся в пиктографических шрифтах:

>>> unicode_test('\u2603')

value="☃", name="SNOWMAN", value2="☃"

Предположим, мы хотим сохранить в строке слово cafe ' . Одно из решений со-

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

сработает:

>>> place = 'café'

>>> place

'café'

Это сработало, поскольку я скопировал это слово из источника, использующе-

го кодировку UTF-8 (с которой вы познакомитесь далее), и вставил его.

Как же нам указать, что последний символ — это «e ' »? Если вы посмотрите на

индекс символа «Е», вы увидите, что имя E WITH ACUTE, LATIN SMALL LETTER имеет индекс

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

183

00Е9. Рассмотрим функции name() и lookup(), с которыми мы только что работали.

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

>>> unicodedata.name('\u00e9')

'LATIN SMALL LETTER E WITH ACUTE'

Теперь найдем код для заданного имени:

>>> unicodedata.lookup('E WITH ACUTE, LATIN SMALL LETTER')

Traceback (most recent call last):