unicodedata — База данных Юникода


Этот модуль предоставляет доступ к базе данных символов Юникода (UCD), которая определяет свойства символов для всех символов Юникода. Данные, содержащиеся в этой базе, собраны из UCD version 15.1.0.

Модуль использует те же имена и символы, которые определены в приложении #44 стандарта Unicode, «Unicode Character Database». В нем определены следующие функции:

unicodedata.lookup(name)

Поиск символа по имени. Если символ с заданным именем найден, возвращается соответствующий символ. Если символ не найден, возвращается значение KeyError.

Изменено в версии 3.3: Добавлена поддержка псевдонимов имен [1] и именованных последовательностей [2].

unicodedata.name(chr[, default])

Возвращает имя, присвоенное символу chr, в виде строки. Если имя не определено, возвращается значение default, а если не задано, возвращается значение ValueError.

unicodedata.decimal(chr[, default])

Возвращает десятичное значение, присвоенное символу chr, в виде целого числа. Если такое значение не определено, возвращается значение default или, если оно не задано, возвращается значение ValueError.

unicodedata.digit(chr[, default])

Возвращает значение цифры, присвоенное символу chr, в виде целого числа. Если такое значение не определено, возвращается значение default или, если оно не задано, возвращается значение ValueError.

unicodedata.numeric(chr[, default])

Возвращает числовое значение, присвоенное символу chr, в виде float. Если такое значение не определено, возвращается значение default или, если оно не задано, возвращается значение ValueError.

unicodedata.category(chr)

Возвращает общую категорию, присвоенную символу chr, в виде строки.

unicodedata.bidirectional(chr)

Возвращает двунаправленный класс, присвоенный символу chr, в виде строки. Если такое значение не определено, возвращается пустая строка.

unicodedata.combining(chr)

Возвращает канонический класс сочетания, присвоенный символу chr, в виде целого числа. Возвращает 0, если класс сочетания не определен.

unicodedata.east_asian_width(chr)

Возвращает восточно-азиатскую ширину, присвоенную символу chr в виде строки.

unicodedata.mirrored(chr)

Возвращает свойство зеркальности, присвоенное символу chr, в виде целого числа. Возвращает 1, если символ был идентифицирован как «зеркальный» в двунаправленном тексте, 0 - в противном случае.

unicodedata.decomposition(chr)

Возвращает отображение разложения символов, присвоенное символу chr как строке. В случае, если такое отображение не определено, возвращается пустая строка.

unicodedata.normalize(form, unistr)

Возвращает нормальную форму form для строки Unicode unistr. Допустимыми значениями для form являются „NFC“, „NFKC“, „NFD“ и „NFKD“.

Стандарт Unicode определяет различные формы нормализации строк Unicode, основанные на определении канонической эквивалентности и эквивалентности совместимости. В Юникоде несколько символов могут быть выражены различными способами. Например, символ U+00C7 (LATIN CAPITAL LETTER C WITH CEDILLA) может быть также выражен как последовательность U+0043 (LATIN CAPITAL LETTER C) U+0327 (COMBINING CEDILLA).

Для каждого символа существует две нормальные формы: нормальная форма C и нормальная форма D. Нормальная форма D (NFD) также известна как каноническая декомпозиция и переводит каждый символ в его разложенную форму. Нормальная форма C (NFC) сначала применяет каноническое разложение, а затем снова составляет предварительно скомбинированные символы.

Помимо этих двух форм, существуют еще две нормальные формы, основанные на эквивалентности совместимости. В Юникоде поддерживаются некоторые символы, которые обычно унифицируются с другими символами. Например, U+2160 (ROMAN NUMERAL ONE) - это фактически то же самое, что и U+0049 (LATIN CAPITAL LETTER I). Однако он поддерживается в Юникоде для совместимости с существующими наборами символов (например, gb2312).

Нормальная форма KD (NFKD) применяет декомпозицию совместимости, то есть заменяет все совместимые символы их эквивалентами. Нормальная форма KC (NFKC) сначала применяет разложение по совместимости, а затем каноническую композицию.

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

unicodedata.is_normalized(form, unistr)

Возвращает, находится ли строка Unicode unistr в нормальной форме form. Допустимыми значениями для form являются „NFC“, „NFKC“, „NFD“ и „NFKD“.

Added in version 3.8.

Кроме того, модуль выдает следующую константу:

unicodedata.unidata_version

Версия базы данных Unicode, используемая в этом модуле.

unicodedata.ucd_3_2_0

Это объект, который имеет те же методы, что и весь модуль, но вместо них использует базу данных Unicode версии 3.2 для приложений, которым требуется именно эта версия базы данных Unicode (например, IDNA).

Примеры:

>>> import unicodedata
>>> unicodedata.lookup('LEFT CURLY BRACKET')
'{'
>>> unicodedata.name('/')
'SOLIDUS'
>>> unicodedata.decimal('9')
9
>>> unicodedata.decimal('a')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: not a decimal
>>> unicodedata.category('A')  # 'L'etter, 'u'ppercase
'Lu'
>>> unicodedata.bidirectional('\u0660') # 'A'rabic, 'N'umber
'AN'

Сноски