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


Модуль предоставляет доступ к базе данных символов Юникода (UCD, Unicode Character Database), которая определяет свойства символа для всех символов Юникода. Данные, содержащиеся в этой базе данных, компилируются из UCD версии 12.1.0.

Модуль использует те же имена и символы, которые определены в стандартном приложении Юникод № 44, «База данных символов Юникод». Он определяет следующие функции:

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 формы для Юникод строки unistr. Допустимыми значения для form являются „NFC“, „NFKC“, „NFD“ и „NFKD“.

Стандарт Юникода определяет различные формы нормализации строк Юникода, основываясь на определении канонической эквивалентности и эквивалентности совместимости. В Юникоде несколько символов могут быть выражены различным образом. Например, символ 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)

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

Добавлено в версии 3.8.

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

unicodedata.unidata_version

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

unicodedata.ucd_3_2_0

Этот объект имеет те же методы, что и весь модуль, но вместо этого использует базу данных юникод версии 3.2 для приложений, которым требуется эта конкретная версия базы данных Юникод (например, 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'

Сноски

[1]http://www.unicode.org/Public/12.1.0/ucd/NameAliases.txt
[2]http://www.unicode.org/Public/12.1.0/ucd/NamedSequences.txt