unicodedata.md
1> **Источник:** https://python-all.ru/3.9/library/unicodedata.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# [`unicodedata`](https://python-all.ru/3.9/library/unicodedata.html#module-unicodedata) – база данных Unicode89---1011Этот модуль предоставляет доступ к базе данных символов Unicode (UCD), которая определяет свойства всех символов Unicode. Данные в этой базе скомпилированы из [UCD версии 13.0.0](https://python-all.ru/3.9/library/unicodedata.html).1213Модуль использует те же имена и символы, что определены в приложении №44 к стандарту Unicode, [«Unicode Character Database»](https://python-all.ru/3.9/library/unicodedata.html). Он определяет следующие функции:1415#### `unicodedata.lookup(name)`1617Ищет символ по имени. Если символ с указанным именем найден, возвращает соответствующий символ. Если не найден, вызывается [`KeyError`](https://python-all.ru/3.9/library/exceptions.html#KeyError).1819Изменено в версии 3.3: добавлена поддержка псевдонимов имён [1](https://python-all.ru/3.9/library/unicodedata.html#id3) и именованных последовательностей [2](https://python-all.ru/3.9/library/unicodedata.html#id4).2021#### `unicodedata.name(chr[, default])`2223Возвращает имя, присвоенное символу *chr*, в виде строки. Если имя не определено, возвращается *default*, а если он не задан, вызывается [`ValueError`](https://python-all.ru/3.9/library/exceptions.html#ValueError).2425#### `unicodedata.decimal(chr[, default])`2627Возвращает десятичное значение, присвоенное символу *chr*, в виде целого числа. Если такое значение не определено, возвращается *default*, а если он не задан, вызывается [`ValueError`](https://python-all.ru/3.9/library/exceptions.html#ValueError).2829#### `unicodedata.digit(chr[, default])`3031Возвращает цифровое значение, присвоенное символу *chr*, в виде целого числа. Если такое значение не определено, возвращается *default*, а если он не задан, вызывается [`ValueError`](https://python-all.ru/3.9/library/exceptions.html#ValueError).3233#### `unicodedata.numeric(chr[, default])`3435Возвращает числовое значение, присвоенное символу *chr*, в виде числа с плавающей запятой. Если такое значение не определено, возвращается *default*, а если он не задан, вызывается [`ValueError`](https://python-all.ru/3.9/library/exceptions.html#ValueError).3637#### `unicodedata.category(chr)`3839Возвращает общую категорию, присвоенную символу *chr*, в виде строки.4041#### `unicodedata.bidirectional(chr)`4243Возвращает двунаправленный класс, присвоенный символу *chr*, в виде строки. Если такое значение не определено, возвращается пустая строка.4445#### `unicodedata.combining(chr)`4647Возвращает канонический комбинирующий класс, присвоенный символу *chr*, в виде целого числа. Возвращает `0`, если комбинирующий класс не определен.4849#### `unicodedata.east_asian_width(chr)`5051Возвращает ширину восточноазиатского символа, присвоенную символу *chr*, в виде строки.5253#### `unicodedata.mirrored(chr)`5455Возвращает свойство зеркальности, присвоенное символу *chr*, в виде целого числа. Возвращает `1`, если символ определён как «зеркальный» в двунаправленном тексте, иначе `0`.5657#### `unicodedata.decomposition(chr)`5859Возвращает отображение декомпозиции символа, присвоенное символу *chr*, в виде строки. Пустая строка возвращается, если такое отображение не определено.6061#### `unicodedata.normalize(form, unistr)`6263Возвращает нормальную форму *form* для строки Unicode *unistr*. Допустимые значения *form*: ‘NFC’, ‘NFKC’, ‘NFD’ и ‘NFKD’.6465Стандарт Unicode определяет различные нормальные формы строки Unicode на основе определений канонической эквивалентности и эквивалентности совместимости. В Unicode одни и те же символы могут быть представлены по-разному. Например, символ U+00C7 (ЛАТИНСКАЯ ЗАГЛАВНАЯ БУКВА C С СЕДИЛЬЮ) может также быть представлен как последовательность U+0043 (ЛАТИНСКАЯ ЗАГЛАВНАЯ БУКВА C) U+0327 (СОЕДИНИТЕЛЬНАЯ СЕДИЛЬ).6667Для каждого символа существует две нормальные формы: форма C и форма D. Нормальная форма D (NFD) также известна как каноническая декомпозиция и преобразует каждый символ в его разложенную форму. Нормальная форма C (NFC) сначала применяет каноническую декомпозицию, а затем снова составляет предварительно составные символы.6869В дополнение к этим двум формам существуют ещё две нормальные формы, основанные на эквивалентности совместимости. В Unicode поддерживаются некоторые символы, которые обычно были бы объединены с другими символами. Например, U+2160 (РИМСКАЯ ЦИФРА ОДИН) на самом деле то же самое, что U+0049 (ЛАТИНСКАЯ ПРОПИСНАЯ БУКВА I). Однако он поддерживается в Unicode для совместимости с существующими наборами символов (например, gb2312).7071Нормальная форма KD (NFKD) применяет декомпозицию совместимости, то есть заменяет все символы совместимости на их эквиваленты. Нормальная форма KC (NFKC) сначала применяет декомпозицию совместимости, а затем каноническую композицию.7273Даже если две строки Unicode нормализованы и выглядят одинаково для человеческого глаза, но одна содержит комбинируемые символы, а другая нет, они могут не быть равными при сравнении.7475#### `unicodedata.is_normalized(form, unistr)`7677Возвращает, находится ли строка Unicode *unistr* в нормальной форме *form*. Допустимые значения для *form*: 'NFC', 'NFKC', 'NFD' и 'NFKD'.7879Новое в версии 3.8.8081Кроме того, модуль предоставляет следующую константу:8283#### `unicodedata.unidata_version`8485Версия базы данных Unicode, используемая в этом модуле.8687#### `unicodedata.ucd_3_2_0`8889Это объект, который имеет те же методы, что и весь модуль, но использует версию базы данных Unicode 3.2 для приложений, которым требуется эта конкретная версия базы данных Unicode (например, IDNA).9091Примеры:9293```python94>>> import unicodedata95>>> unicodedata.lookup('LEFT CURLY BRACKET')96'{'97>>> unicodedata.name('/')98'SOLIDUS'99>>> unicodedata.decimal('9')1009101>>> unicodedata.decimal('a')102Traceback (most recent call last):103 File "<stdin>", line 1, in <module>104ValueError: not a decimal105>>> unicodedata.category('A') # 'L' – буква, 'u' – заглавная106'Lu'107>>> unicodedata.bidirectional('\u0660') # 'A' – арабская, 'N' – число108'AN'109```110111Сноски112113**[1](https://python-all.ru/3.9/library/unicodedata.html#id1)**114115[https://www.unicode.org/Public/13.0.0/ucd/NameAliases.txt](https://python-all.ru/3.9/library/unicodedata.html)116117**[2](https://python-all.ru/3.9/library/unicodedata.html#id2)**118119[https://www.unicode.org/Public/13.0.0/ucd/NamedSequences.txt](https://python-all.ru/3.9/library/unicodedata.html)120