unicodedata — Base de datos Unicode


Este módulo proporciona acceso a la base de datos de caracteres Unicode (UCD), que define las propiedades de todos los caracteres Unicode. Los datos contenidos en esta base de datos se compilan a partir de la UCD versión 13.0.0.

El módulo utiliza los mismos nombres y símbolos definidos por el Anexo #44 del estándar Unicode de la «Base de datos de caracteres Unicode». Define las siguientes funciones:

unicodedata.lookup(name)

Busca el carácter por su nombre. Si se encuentra un carácter con el nombre proporcionado, retornará el carácter correspondiente. Si no se encuentra, se lanza una excepción KeyError.

Distinto en la versión 3.3: Se ha agregado soporte para alias de nombre 1 y secuencias con nombre 2.

unicodedata.name(chr[, default])

Retorna el nombre asignado al carácter chr como una cadena de caracteres. Si no se define ningún nombre, se retorna default o, si no se proporciona, se lanza una excepción ValueError.

unicodedata.decimal(chr[, default])

Retorna el valor decimal asignado al carácter chr como un entero. Si no se define dicho valor, se retorna default o, si no se proporciona, se lanza una excepción ValueError.

unicodedata.digit(chr[, default])

Retorna el valor del dígito asignado al carácter chr como un entero. Si no se define dicho valor, se retorna default o, si no se proporciona, se genera una excepción ValueError.

unicodedata.numeric(chr[, default])

Retorna el valor numérico asignado al carácter chr como un flotante. Si no se define dicho valor, se retorna default o, si no se proporciona, se lanza una excepción ValueError.

unicodedata.category(chr)

Retorna la categoría general asignada al carácter chr como una cadena de caracteres.

unicodedata.bidirectional(chr)

Retorna la clase bidireccional asignada al carácter chr como una cadena de caracteres. Si no se define tal valor, se retorna una cadena de caracteres vacía.

unicodedata.combining(chr)

Retorna la clase de combinación canónica asignada al carácter chr como un entero. Retorna 0 si no se define ninguna clase de combinación.

unicodedata.east_asian_width(chr)

Retorna el ancho asignado al carácter chr para el este asiático como una cadena de caracteres.

unicodedata.mirrored(chr)

Retorna la propiedad reflejada asignada al carácter chr como un entero. Retorna 1 si el carácter se ha identificado como un carácter «reflejado» en texto bidireccional y 0 en caso contrario.

unicodedata.decomposition(chr)

Retorna el mapeo de descomposición de caracteres asignado al carácter chr como una cadena de caracteres. Se retorna una cadena de caracteres vacía en caso de que no se defina tal mapeo.

unicodedata.normalize(form, unistr)

Retorna la forma normalizada form para la cadena Unicode unistr. Los valores válidos para form son “NFC”, “NFKC”, “NFD” y “NFKD”.

El estándar Unicode define varias formas de normalización de una cadena Unicode, basándose en la definición de equivalencia canónica y equivalencia de compatibilidad. En Unicode, varios caracteres se pueden expresar de diversas formas. Por ejemplo, el carácter U+00C7 (LETRA C LATINA MAYÚSCULA CON CEDILLA) también se puede expresar con la secuencia U+0043 (LETRA C LATINA MAYÚSCULA) U+0327 (CEDILLA COMBINABLE).

Para cada carácter, hay dos formas normalizadas: la forma normal C y la forma normal D. La forma normal D (NFD) también se conoce como descomposición canónica y traduce cada carácter a su forma descompuesta. La forma normal C (NFC) primero aplica una descomposición canónica y luego vuelve a componer los caracteres combinados previamente.

Además de las dos anteriores, hay dos formas normalizadas adicionales basadas en la equivalencia de compatibilidad. En Unicode, se admiten ciertos caracteres que normalmente se unificarán con otros caracteres. Por ejemplo, U+2160 (NUMERAL ROMANO UNO) es realmente lo mismo que U+0049 (LETRA LATINA MAYÚSCULA I). Sin embargo, esta característica está soportada por Unicode para ser compatible con los conjuntos de caracteres existentes (por ejemplo, gb2312).

La forma normalizada KD (NFKD) aplicará la descomposición de compatibilidad, es decir, reemplazará todos los caracteres de compatibilidad con sus equivalentes. La forma normalizada KC (NFKC) primero aplica la descomposición de compatibilidad, seguida de la composición canónica.

Incluso si dos cadenas Unicode están normalizadas y parecen iguales para un lector humano, si una tiene caracteres combinados y la otra no, es posible que no se comparen como iguales.

unicodedata.is_normalized(form, unistr)

Retorna si la cadena Unicode unistr está en la forma normalizada form. Los valores válidos para form son “NFC”, “NFKC”, “NFD” y “NFKD”.

Nuevo en la versión 3.8.

Además, el módulo expone las siguientes constantes:

unicodedata.unidata_version

La versión de la base de datos Unicode usada en este módulo.

unicodedata.ucd_3_2_0

Este es un objeto que tiene los mismos métodos que el módulo completo, pero usa la versión 3.2 de la base de datos Unicode en su lugar. Es útil para aplicaciones que requieren esta versión específica de la base de datos Unicode (como IDNA).

Ejemplos:

>>> 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'

Notas al pie

1

https://www.unicode.org/Public/13.0.0/ucd/NameAliases.txt

2

https://www.unicode.org/Public/13.0.0/ucd/NamedSequences.txt