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):