Сообщить об ошибке.

Модуль unicodedata в Python, база данных Unicode

База данных Unicode

Модуль unicodedata обеспечивает доступ к базе данных символов Unicode (UCD), которая определяет свойства символов для всех символов Unicode.

Модуль unicodedata использует те же имена и символы, которые определены в Стандартном приложении Unicode № 44 "База данных символов Unicode" .

Изменено в Python 3.11. База данных Unicode обновлена ​​до версии 14.0.0.

Изменено в Python 3.12. База данных Unicode обновлена ​​до версии 15.0.0.

Содержание:


Синтаксис:

import unicodedata
unicodedata.function_name()

import unicodedata as ucd
ucd.function_name()

from unicodedata import function_name
function_name()

Модуль определяет следующие функции:

unicodedata.lookup(name):

Функция lookup() производит поиск символа Unicode по имени. Если найден символ с указанным name именем, то lookup() вернет соответствующий символ. Если не найден, то поднимается исключение KeyError.

>>> from unicodedata import lookup
>>> lookup('CYRILLIC SMALL LETTER A')
# 'а'

unicodedata.name(chr[, default]):

Функция name() возвращает имя, присвоенное символу chr в виде строки. Если имя не определено, возвращается значение, заданное по умолчанию default или, если не указано, вызывается исключение ValueError.

>>> from unicodedata import name
>>> name('А')
# 'CYRILLIC CAPITAL LETTER A'
>>> name('1')
# 'DIGIT ONE'

unicodedata.decimal(chr[, default]):

Функция decimal() возвращает десятичное значение, назначенное символу chr, как целое число. Если такое значение не определено, возвращается значение, заданное по умолчанию или, если не задано, вызывается исключение ValueError.

>>> from unicodedata import decimal
>>> decimal('7')
# 7
>>> decimal('a', False)
# False

unicodedata.digit(chr[, default]):

Функция digit() возвращает цифровое значение, назначенное символу chr, как целое число. Если такое значение не определено, возвращается значение, заданное по умолчанию или, если не задано, вызывается исключение ValueError.

>>> from unicodedata import digit
>>> digit('9')
# 
>>> digit('f', False)
# False

unicodedata.numeric(chr[, default]):

Функция numeric() возвращает числовое значение, назначенное символу chr, как float. Если такое значение не определено, возвращается значение, заданное по умолчанию или, если не задано, вызывается исключение ValueError.

>>> from unicodedata import numeric
>>> numeric('5')
# 5.0
>>> numeric('z', False)
# False

unicodedata.category(chr):

Функция category() возвращает общую категорию, назначенную символу chr в виде строки.

>>> from unicodedata import category
>>> category('3')
# 'Nd'
>>> category('z')
# 'Ll'

unicodedata.bidirectional(chr):

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

>>> from unicodedata import bidirectional
>>> bidirectional('1')
# 'EN'
>>> bidirectional('+')
# 'ES'

unicodedata.combining(chr):

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

>>> from unicodedata import combining
>>> combining('9')
# 0
>>> combining('=')
# 0

unicodedata.east_asian_width(chr):

Функция east_asian_width() возвращает восточно-азиатскую ширину, назначенную символу chr в виде строки.

>>> from unicodedata import east_asian_width
>>> east_asian_width('V')
# 'Na'
>>> east_asian_width('Ю')
# 'A'

unicodedata.mirrored(chr):

Функция mirrored() возвращает зеркальное свойство, назначенное символу chr, как целое число. Возвращает 1, если символ был идентифицирован как "зеркальный" в двунаправленном тексте, 0 в противном случае.

>>> from unicodedata import mirrored
>>> mirrored('=')
# 0

unicodedata.decomposition(chr):

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

>>> from unicodedata import decomposition
>>> decomposition('=')
# ''
>>> decomposition('ф')
# ''

unicodedata.normalize(form, unistr):

Функция normalize() возвращает нормальную форму form для строки Unicode unistr. Допустимые значения для формы: NFC, NFKC, NFD и NFKD.

Стандарт Unicode определяет различные формы нормализации строки 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) сначала применяет каноническую декомпозицию, затем снова создает предварительно объединенные символы.

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

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

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

>>> from unicodedata import normalize
>>> normalize('NFC', 'Й')
# 'Й'
>>> normalize('NFD', 'Й')
# 'Й'

unicodedata.is_normalized(form, unistr):

Функция is_normalized() проверяет, возвращает ли Unicode строка unistr в нормальной форме form. Допустимые значения для формы: NFC, NFKC, NFD и NFKD.

>>> from unicodedata import is_normalized
>>> is_normalized('NFD', 'Й')
# False
>>> is_normalized('NFD', 'ф')
# True

unicodedata.unidata_version:

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

>>> from unicodedata import unidata_version
>>> unidata_version
# '9.0.0'

unicodedata.ucd_3_2_0:

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

>>> from unicodedata import ucd_3_2_0
>>> ucd_3_2_0.name('э', False)
# 'CYRILLIC SMALL LETTER E'
>>> ucd_3_2_0.name('е', False)
# 'CYRILLIC SMALL LETTER IE'

Примеры использования:

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

# 'L'etter, 'u'ppercase
unicodedata.category('A')  
# 'Lu'

# 'A'rabic, 'N'umber
unicodedata.bidirectional('\u0660') 
# 'AN'