Документация Python неофициальный перевод

unicodedata – База данных Unicodeunicodedata – Unicode Database

Этот модуль предоставляет доступ к базе данных символов Unicode, которая определяет свойства символов для всех символов Unicode. Данные в этой базе основаны на файле UnicodeData.txt версии 5.1.0, который публично доступен по адресу ftp://ftp.unicode.org/.

Модуль использует те же имена и символы, что определены в формате файла UnicodeData версии 5.1.0 (см. http://www.unicode.org/Public/5.1.0/ucd/UCD.html). Он определяет следующие функции:

unicodedata.lookup(name)
Поиск символа по имени. Если символ с заданным именем найден, возвращается соответствующий символ. Если не найден, возникает KeyError.
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, в виде числа с плавающей точкой. Если такое значение не определено, возвращается 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, основанные на определении канонической эквивалентности и совместимой эквивалентности. В Unicode некоторые символы могут быть выражены разными способами. Например, символ U+00C7 (LATIN CAPITAL LETTER C WITH CEDILLA) также может быть выражен как последовательность U+0327 (COMBINING CEDILLA) U+0043 (LATIN CAPITAL LETTER C).

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

В дополнение к этим двум формам существуют ещё две нормальные формы, основанные на эквивалентности совместимости. В Unicode поддерживаются некоторые символы, которые обычно были бы объединены с другими символами. Например, U+2160 (РИМСКАЯ ЦИФРА ОДИН) на самом деле то же самое, что U+0049 (ЛАТИНСКАЯ ПРОПИСНАЯ БУКВА I). Однако он поддерживается в Unicode для совместимости с существующими наборами символов (например, gb2312).

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

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

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

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

Примеры:

>>> import unicodedata
>>> unicodedata.lookup('LEFT CURLY BRACKET')
u'{'
>>> unicodedata.name('/')
'SOLIDUS'
>>> unicodedata.decimal('9')
9
>>> unicodedata.decimal('a')
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
ValueError: not a decimal
>>> unicodedata.category('A')  # 'L' – буква, 'u' – заглавная
'Lu'
>>> unicodedata.bidirectional('\u0660') # 'A' – арабская, 'N' – число
'AN'