Модуль unicodedata
обеспечивает доступ к базе данных символов Unicode (UCD), которая определяет свойства символов для всех символов Unicode.
Модуль unicodedata
использует те же имена и символы, которые определены в Стандартном приложении Unicode № 44 "База данных символов Unicode" .
unicodedata.lookup()
,unicodedata.name()
,unicodedata.decimal()
,unicodedata.digit()
,unicodedata.numeric()
,unicodedata.category()
,unicodedata.bidirectional()
,unicodedata.combining()
,unicodedata.east_asian_width()
,unicodedata.mirrored()
,unicodedata.decomposition()
,unicodedata.normalize()
,unicodedata.is_normalized()
,unicodedata.unidata_version
,unicodedata.ucd_3_2_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'