7.9. unicodedata – база данных Unicode¶unicodedata – Unicode Database
Этот модуль предоставляет доступ к базе данных символов Unicode, которая определяет свойства символов для всех символов Unicode. Данные в этой базе основаны на файле UnicodeData.txt версии 5.2.0, который находится в открытом доступе по адресу ftp://ftp.unicode.org/.
Модуль использует те же имена и обозначения, что определены в формате файла UnicodeData версии 5.2.0 (см. https://www.unicode.org/reports/tr44/). Он определяет следующие функции:
-
unicodedata.lookup(name)¶ Поиск символа по имени. Если символ с указанным именем найден, возвращается соответствующий символ Unicode. Если не найден, вызывается
KeyError.
-
unicodedata.name(unichr[, default])¶ Возвращает имя, присвоенное символу Unicode unichr, в виде строки. Если имя не определено, возвращается default, а если он не указан, вызывается
ValueError.
-
unicodedata.decimal(unichr[, default])¶ Возвращает десятичное значение, присвоенное символу Unicode unichr, в виде целого числа. Если такое значение не определено, возвращается default, а если он не указан, вызывается
ValueError.
-
unicodedata.digit(unichr[, default])¶ Возвращает цифровое значение, присвоенное символу Unicode unichr, в виде целого числа. Если такое значение не определено, возвращается default, а если он не указан, вызывается
ValueError.
-
unicodedata.numeric(unichr[, default])¶ Возвращает числовое значение, присвоенное символу Unicode unichr, в виде числа с плавающей запятой. Если такое значение не определено, возвращается default, а если он не указан, вызывается
ValueError.
-
unicodedata.category(unichr)¶ Возвращает общую категорию, присвоенную символу Unicode unichr, в виде строки.
-
unicodedata.bidirectional(unichr)¶ Возвращает класс двунаправленности, присвоенный символу Unicode unichr, в виде строки. Если такое значение не определено, возвращается пустая строка.
-
unicodedata.combining(unichr)¶ Возвращает канонический класс комбинирования, присвоенный символу Unicode unichr, в виде целого числа. Возвращает
0, если класс комбинирования не определён.
-
unicodedata.east_asian_width(unichr)¶ Возвращает ширину восточноазиатского символа, присвоенную символу Unicode unichr, в виде строки.
Новое в версии 2.4.
-
unicodedata.mirrored(unichr)¶ Возвращает свойство зеркальности, присвоенное символу Unicode unichr, в виде целого числа. Возвращает
1, если символ определён как «зеркальный» в двунаправленном тексте, иначе0.
-
unicodedata.decomposition(unichr)¶ Возвращает отображение разложения символа, присвоенное символу Unicode unichr, в виде строки. Возвращается пустая строка, если такое отображение не определено.
-
unicodedata.normalize(form, unistr)¶ Возвращает нормальную форму form для строки Unicode unistr. Допустимые значения form: ‘NFC’, ‘NFKC’, ‘NFD’ и ‘NFKD’.
Стандарт Unicode определяет различные нормальные формы строки Unicode на основе определений канонической эквивалентности и эквивалентности совместимости. В Unicode одни и те же символы могут быть представлены по-разному. Например, символ U+00C7 (ЛАТИНСКАЯ ЗАГЛАВНАЯ БУКВА C С СЕДИЛЬЮ) может также быть представлен как последовательность U+0043 (ЛАТИНСКАЯ ЗАГЛАВНАЯ БУКВА C) U+0327 (СОЕДИНИТЕЛЬНАЯ СЕДИЛЬ).
Для каждого символа существует две нормальные формы: форма C и форма D. Нормальная форма D (NFD) также известна как каноническая декомпозиция и преобразует каждый символ в его разложенную форму. Нормальная форма C (NFC) сначала применяет каноническую декомпозицию, а затем снова составляет предварительно составные символы.
В дополнение к этим двум формам существуют ещё две нормальные формы, основанные на эквивалентности совместимости. В Unicode поддерживаются некоторые символы, которые обычно были бы объединены с другими символами. Например, U+2160 (РИМСКАЯ ЦИФРА ОДИН) на самом деле то же самое, что U+0049 (ЛАТИНСКАЯ ПРОПИСНАЯ БУКВА I). Однако он поддерживается в Unicode для совместимости с существующими наборами символов (например, gb2312).
Нормальная форма KD (NFKD) применяет декомпозицию совместимости, то есть заменяет все символы совместимости на их эквиваленты. Нормальная форма KC (NFKC) сначала применяет декомпозицию совместимости, а затем каноническую композицию.
Даже если две строки Unicode нормализованы и выглядят одинаково для человеческого глаза, но одна содержит комбинируемые символы, а другая нет, они могут не быть равными при сравнении.
Новое в версии 2.3.
Кроме того, модуль предоставляет следующую константу:
-
unicodedata.unidata_version¶ Версия базы данных Unicode, используемая в этом модуле.
Новое в версии 2.3.
-
unicodedata.ucd_3_2_0¶ Это объект, который имеет те же методы, что и весь модуль, но использует версию базы данных Unicode 3.2 для приложений, которым требуется эта конкретная версия базы данных Unicode (например, IDNA).
Новое в версии 2.5.
Примеры:
>>> import unicodedata
>>> unicodedata.lookup('LEFT CURLY BRACKET')
u'{'
>>> unicodedata.name(u'/')
'SOLIDUS'
>>> unicodedata.decimal(u'9')
9
>>> unicodedata.decimal(u'a')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: not a decimal
>>> unicodedata.category(u'A') # 'L' – буква, 'u' – заглавная
'Lu'
>>> unicodedata.bidirectional(u'\u0660') # 'A' – арабская, 'N' – число
'AN'