¿Qué es Unicode?
Unicode es un estándar internacional para la codificación, representación y procesamiento de caracteres de texto de prácticamente todos los sistemas de escritura del mundo. Cada carácter recibe un punto de código único que puede almacenarse en distintas codificaciones como UTF-8 o UTF-16. Gracias a ello, Unicode permite una representación y un procesamiento uniformes de los textos en diferentes plataformas e idiomas.
- Gratis SSL Wildcard para transferencias de datos más seguras
- Gratis registro privado para más privacidad
¿Qué es Unicode?
Unicode es el “estándar universal de codificación de caracteres”, su nombre deriva del término inglés “Universal Character Encoding”. Es un estándar para codificar caracteres en representación binaria. Esto permite almacenar y procesar textos en sistemas digitales.
Unicode es innovador en el sentido de que no está atado a los formatos y codificaciones de un único alfabeto de lenguaje humano. Más bien, Unicode fue creado para servir como un estándar uniforme y representar todos los sistemas de escritura y caracteres desarrollados por el ser humano.
Desde el lanzamiento de Unicode 1.0 a finales de 1991, este estándar ha conseguido su propósito. Los navegadores y los sistemas operativos utilizan Unicode internamente. Con la versión 16.0 publicada por el Consorcio Unicode en 2024, el estándar Unicode abarcaba ya un repertorio de 154 998 caracteres en total. El conjunto de caracteres cubierto por el estándar Unicode coincide plenamente con el “Universal Coded Character Set” (UCS), que está normalizado internacionalmente como ISO/IEC 10646.
Bases técnicas de la codificación de caracteres
En primer lugar, es importante entender que toda la información presente en un sistema digital consiste, a un nivel más profundo, en interminables cadenas de ceros y unos. Esto se denomina “representación binaria”. El código binario es en sí algo similar al alfabeto. Sin embargo, en el código binario solo hay dos “letras”: el cero y el uno. Cada dígito dentro de una secuencia binaria se llama “bit”.
El truco básico de la tecnología de la información digital consiste en mapear los caracteres de diferentes alfabetos como secuencias de ceros y unos. De esta forma, se pueden codificar números y letras, pero también todas sus posibles variantes. En general se habla de “símbolos”. Cuanto más larga sea la secuencia de ceros y unos para la representación de un solo símbolo, más símbolos se podrán representar. El número de símbolos posibles se duplica con cada bit añadido.
Un ejemplo concreto: imaginemos que tenemos “palabras” binarias, que tienen dos bits de longitud. Se podrían codificar cuatro números con ellos:
| Palabra de 2 bits | Número |
|---|---|
| 00 | 0 |
| 01 | 1 |
| 10 | 2 |
| 11 | 3 |
Si añadimos otro bit al principio de la secuencia, el número de palabras bit posibles se duplica. Se trataría de las secuencias de bits ya conocidas, cada una precedida por un cero o un uno. Podríamos codificar ocho números:
| Palabra de 3 bits | Número |
|---|---|
| 000 | 0 |
| 001 | 1 |
| 010 | 2 |
| 011 | 3 |
| 100 | 4 |
| 101 | 5 |
| 110 | 6 |
| 111 | 7 |
Una palabra de 8 bits se denomina octeto o byte.
De manera simple, hemos mostrado la codificación de los números como ejemplo. Sin embargo, se utiliza el mismo principio también en sistemas digitales para la codificación de letras o cualquier carácter. Este es un ejemplo muy simplificado de codificación binaria de letras:
| Palabra de 3 bits | Letra |
|---|---|
| 000 | A |
| 001 | B |
| 010 | C |
La representación gráfica de un carácter se llama glifo. Dependiendo de la fuente utilizada, puede haber diferentes glifos para el mismo carácter, e incluso dentro de una misma fuente pueden existir varias variantes de un glifo. Un ejemplo de esto son los diferentes estilos, como los pesos, ligaduras o cursivas. A continuación, se muestra una representación ampliada que abarca la asignación del carácter al glifo:
| Representación binaria | Decimal | Carácter codificado | Glifo |
|---|---|---|---|
| 1000001 | 65 | “A” mayúscula del alfabeto latino | A |
| 1100001 | 97 | “A” minúscula del alfabeto latino | a |
| 0110000 | 48 | “0” árabe | 0 |
| 0111001 | 57 | “9” árabe | 9 |
| 11000100 | 196 | “Ä” mayúscula | Ä |
| 11000001 | 193 | “Á” mayúscula | Á |
Terminología de la codificación de caracteres
La codificación digital de caracteres abarca una serie de conceptos específicos. En español, algunos términos se usan de manera intercambiable. Para poder dar una definición precisa de Unicode, también te mostramos aquí los términos en inglés:
| Término | Significado | Término en inglés |
|---|---|---|
| Conjunto de caracteres | Grupo de caracteres posibles, por ejemplo, dígitos “0-9”, letras “a-z”, etc. | Character set |
| Punto de código | Número asignado a un carácter específico dentro del dominio del código. | Code point |
| Conjunto de caracteres codificado | Asignación de cada carácter a exactamente un punto de código | Coded character set |
| Codificación de caracteres | Proceso de conversión de un carácter a una estructura técnica, por ejemplo, una representación binaria. | Character encoding |
Resumen de las codificaciones de caracteres más comunes
Antes de la llegada de Unicode, existía una gran variedad de codificaciones específicas. La norma era utilizar una codificación distinta para cada lengua o familia lingüística. Esto a menudo llevaba a errores de representación e incoherencias en los datos. Para contrarrestar eso, las nuevas codificaciones de caracteres se modelaron a menudo como la revisión de un estándar existente compatible con versiones anteriores. Por ejemplo, el estándar Unicode actual se basa en la anterior codificación de caracteres ISO Latin-1, que a su vez se basa en la codificación ASCII.
| Codificación | Bits por carácter | Caracteres posibles | Conjunto de caracteres |
|---|---|---|---|
| ASCII | 7 bits | 128 | Letras, números y caracteres especiales del teclado estadounidense, así como caracteres de control para teletipo |
| ISO Latin-1 (ISO 8859-1) | 8 bits | 256 | Primeros 128 caracteres como ASCII, otros 128 caracteres para los caracteres especiales de las lenguas europeas |
| Universal Coded Character Set 2 (UCS-2) | 16 bits | 65 536 | Caracteres del “Basic Multilingual Plane” (BMP); los primeros 256 caracteres son los de ISO Latin-1 |
| Universal Coded Character Set 4 (UCS-4) | 32 bits | 1 114 111 | Caracteres del BMP y otros caracteres; un total de 143 859 caracteres en la versión 13.0 de Unicode; los primeros 256 caracteres como ISO Latin-1 |
| UCS Transformation Format 8 Bit (UTF-8) | 8/16/24/32 bits | 1 114 111 | Cualquier carácter de UCS-2 y UCS-4; los primeros 256 caracteres como ISO Latin-1 |
Estructura del estándar Unicode
El estándar Unicode define los caracteres y los puntos de código correspondientes para letras, caracteres silábicos, ideogramas, signos de puntuación, caracteres especiales y números. Además del alfabeto latino, se admiten los alfabetos griego, cirílico, árabe, hebreo y tailandés. También acepta las escrituras japonesas (hiragana y katakana), china y coreana (hangul). Presenta a su vez caracteres especiales matemáticos, comerciales y técnicos, así como caracteres de control históricos para teletipo.
Los caracteres se resumen en una serie de tablas de caracteres. A continuación, ofrecemos un resumen de las tablas de caracteres más comunes.
Sistemas de escritura del estándar Unicode
| Tabla de caracteres | Contiene, entre otros, estos alfabetos |
|---|---|
| Sistemas de escritura europeos | Armenio, georgiano, griego y latín |
| Sistemas de escritura africanos | Etíope, jeroglíficos egipcios, coptos |
| Sistemas de escritura de Oriente Medio | Árabe, hebreo, sirio |
| Sistemas de escritura de Asia Central | Mongol, tibetano y turco antiguo |
| Sistemas de escritura del sur de Asia | Brahmi, tamil y védico |
| Sistemas de escritura del sudeste asiático | Khmer, rohinyá y tailandés |
| Sistemas de escritura de Indonesia y Oceanía | Balinés, buginés y javanés |
| Sistemas de escritura de Asia oriental | CJK (chino, japonés, coreano), hangul (coreano), hiragana (japonés) |
| Sistemas de escritura americanos | Cheroqui, silabario canadiense, osage |
Símbolos y puntuación del estándar Unicode
| Tabla de caracteres | Contiene, entre otros, estos signos |
|---|---|
| Puntuación | Signos de puntuación de la lengua inglesa, signos de puntuación de las lenguas europeas, signos de puntuación CJK |
| Símbolos alfanuméricos | Símbolos matemáticos, letras circuladas |
| Símbolos técnicos | Símbolos del lenguaje de programación APL, símbolos para el reconocimiento óptico de textos |
| Números y cifras | Números mayas, números otomanos siyaq, números de la escritura cuneiforme sumeria |
| Símbolos matemáticos | Flechas, operadores matemáticos, formas geométricas |
| Emojis y pictogramas | Emoticonos, dingbats, otros pictogramas |
| Otros símbolos | Símbolos alquímicos, signos de moneda, signos de ajedrez, dominó y mahjong |
| Sistemas de notación | Patrones braille, notación musical, taquigrafía duployana |
¿Para qué se utiliza Unicode?
El estándar Unicode sirve principalmente como base universal para procesar, almacenar e intercambiar textos en cualquier idioma. La mayoría de los componentes de software modernos, como bibliotecas, protocolos, bases de datos, etc., que operan con texto, se basan en Unicode. Te mostramos el abanico de posibles aplicaciones con los siguientes ejemplos:
Sistemas operativos
Unicode es el estándar interno para la asignación de texto en la mayoría de los sistemas operativos modernos. Algunos sistemas operativos, como macOS de Apple, permiten el uso de caracteres Unicode en los nombres de archivos.
Páginas web
La variante Unicode UTF-8 se ha convertido en el estándar para codificar documentos HTML. Ya en 2016, más del 80 % de las páginas web más visitadas del mundo utilizaban UTF-8 para almacenar y mostrar sus documentos HTML. Para el uso de letras no ASCII en los nombres de dominio, se ha establecido el estándar Punycode.
- Creador de páginas web rápido e intuitivo
- Imágenes y textos instantáneos con SEO optimizado por IA
- Dominio, SSL y buzón de correo electrónico incluidos
Lenguajes de programación
Muchos lenguajes de programación modernos utilizan Unicode como base para procesar el texto. Un avance más reciente es la posibilidad de utilizar caracteres Unicode para nombrar variables y funciones. Esto es posible en ECMAScript/JavaScript, entre otros. Lo representamos en el siguiente código:
let ︎👍 = true;
let 👎 = false;
if (bool_var === ︎👎) {
// …
}javascriptBases de datos
La popular y ampliamente utilizada base de datos MySQL es compatible con el conjunto completo de caracteres Unicode con la codificación de caracteres “utf8mb4”. Sin embargo, cuando se utiliza la codificación de caracteres “utf8”, los caracteres cuyo punto de código supera los 3 bytes se pierden.
Fuentes
Las fuentes contienen los glifos utilizados para la representación gráfica del texto. Debido al gran número de caracteres que contiene el estándar Unicode, no hay ninguna fuente que contenga todos los caracteres. Incluso el subconjunto Basic Multilingual Plane solo está completamente cubierto por unas pocas fuentes. He aquí algunos ejemplos:
| Fuente Unicode | Glifos | Licencia |
|---|---|---|
| Noto | Alrededor de 77 000 | Open Font License |
| Sun-ExtA/B | Alrededor de 50 000 | Freeware |
| Unifont | Alrededor de 63 000 | GNU GPL |
| Code2000 | Alrededor de 63 000 | Shareware |
- Store, share, and edit data easily
- Backed up and highly secure
- Sync with all devices
¿Cómo se utiliza Unicode?
Muchas veces, los usuarios utilizan Unicode sin saberlo. El texto digital existe en la mayoría de los documentos y aplicaciones como Unicode y puede ser copiado, pegado y editado por el usuario a voluntad. A veces surge la necesidad de que el usuario inserte un carácter Unicode específico en el texto. Hay varias formas de hacerlo, que presentamos a continuación:
Teclados de software especiales
El uso de teclados de software especiales es probablemente el método más común para insertar caracteres Unicode en el texto. Omnipresentes en los dispositivos móviles, los teclados de software permiten cambiar de idioma y utilizar sus correspondientes alfabetos. Esto cambia la asignación de teclas, con todos los caracteres procedentes del repertorio Unicode. Los caracteres pueden mezclarse y combinarse entre sí en los textos.
Un buen ejemplo de ello son los emojis: en Unicode, los emojis son caracteres frecuentes como letras, números y caracteres especiales. Como es habitual en los caracteres digitales, la representación de los emojis es independiente de su modelado interno. Cada sistema operativo representa los emojis de una manera ligeramente diferente.
Los útiles teclados de software no solo se encuentran en los dispositivos móviles. También están presentes en el escritorio. Se pueden abrir fácilmente en Windows, macOS, y muchas distribuciones de Linux y muestran un conjunto diferente de caracteres en función del idioma seleccionado. Como el número de teclas es limitado, no se representan todos los caracteres Unicode. Se ofrece más bien una selección de los caracteres más comunes según el idioma.
Tablas de caracteres Unicode
Además de los teclados de software, las tablas de caracteres Unicode son probablemente la forma más útil de acceder a los caracteres Unicode. Como recordatorio, un conjunto de caracteres codificados (“Coded character set”) es el conjunto de todos los caracteres junto a sus puntos de código únicos correspondientes. Para una estructura de este tipo, la disposición en forma de tabla es muy útil, y de hecho el estándar Unicode incluye exactamente estas tablas, llamadas Code Charts. Por un lado, se pueden copiar caracteres específicos de estas tablas para utilizarlos en otros lugares. Por otro lado, los usuarios pueden leer el punto de código correspondiente, por ejemplo, para utilizarlo como una referencia de carácter numérico.
Muchos sistemas operativos de escritorio también contienen una tabla de caracteres Unicode. Esta ofrece una visión general de todos los caracteres Unicode disponibles, incluidos el punto de código, la descripción y el glifo. Se puede insertar o copiar cualquier carácter con un clic. También se puede crear una tabla de caracteres con unas pocas líneas de código. Más adelante en este artículo te mostraremos un ejemplo en el lenguaje de programación Python.
Referencia de carácter numérico
El estándar Unicode se centra en la asignación de caracteres a puntos de código. Si conoces el punto de código de un carácter, puedes utilizarlo para insertar el carácter correspondiente en diferentes contextos. En Windows, la inserción de símbolos Unicode se realiza desde el teclado hardware normal utilizando una combinación de teclas especial. Ten en cuenta que el número de puntos de código debe introducirse normalmente en notación hexadecimal.
La mayoría de las veces, los programadores necesitan las referencias de caracteres numéricos. La representación hexadecimal de los puntos de código permite mapear un carácter Unicode en caracteres del conjunto ASCII. Aquí mostramos el procedimiento en HTML; en principio, esto funciona igual de bien en Python, C++, etc.
El esquema general para incluir un carácter por referencia numérica incluye la referencia en sí, así como una terminación de apertura y cierre. En los documentos HTML, la referencia numérica se abre con &#x y se cierra con ;”. En medio, se introduce el punto de código hexadecimal de dos a cuatro caracteres sin espacios. El resultado es el patrón &#xNNNN;.
Por ejemplo, para introducir el signo de copyright “©” en un documento HTML, se procede de la siguiente manera:
- Se busca el carácter en una tabla Unicode
- Se lee el punto de código correspondiente al carácter. En nuestro ejemplo, el punto de código se indica como “U+00A9”, que corresponde a la representación hexadecimal.
- Se compone la referencia del carácter y se inserta en el código fuente HTML o en un documento Markdown. En nuestro caso, introducimos
©, lo que genera el carácter renderizado “©”.
Otro enfoque relacionado, aunque menos frecuente, permite el uso de puntos de código en notación decimal en lugar de hexadecimal. En este caso, la referencia numérica comienza con &# (sin la “x”) y termina con ; como antes. Entre ambos se escribe el punto de código en formato decimal. En el caso de nuestro ejemplo, la referencia numérica es © para el símbolo de copyright.
Utiliza el inspector de caracteres Unicode para obtener rápidamente los diferentes códigos de un carácter
Entidades de carácter
Dado que escribir los caracteres Unicode como referencias numéricas no es intuitivo para los humanos, existe otro método. Se trata de las entidades de carácter. Se definen para los caracteres de uso común y asignan un nombre corto y fácil de recordar al carácter. Una entidad de carácter comienza con el símbolo et & y termina con un punto y coma ;. Entre ellos, el nombre definido se coloca sin espacios. Para insertar el signo de copyright “©” en HTML, basta con escribir ©.
La lista completa de entidades de carácter definidas está disponible en estándar HTML.
Lenguajes de programación
La mayoría de los lenguajes de programación contienen funciones básicas que pueden utilizarse para convertir caracteres y puntos de código. Las funciones correspondientes suelen llamarse ord(carácter) y chr(punto de código). Se aplica lo siguiente:
chr(ord(carácter)) == Carácter
Ten en cuenta que siempre es posible determinar el punto de código correspondiente a un carácter. Por el contrario, el mapeado solo funciona para los números que se definen realmente como puntos de código de caracteres. Aquí mostramos el esquema básico utilizando un breve ejemplo de Python:
# Determinar el punto de código decimal de un carácter
ord('A') # `65`
# Determinar el punto de código hexadecimal de un carácter
hex(ord('A')) # `0x41`
# Determinar el carácter que pertenece al punto de código
chr(65) # `'A'`
chr(0x41) # `'A'`
chr(0x110001) # Error, ya que el punto de código > `0x110000`pythonCon la ayuda de estas funciones, es posible crear fácilmente una tabla de caracteres para los puntos de código del conjunto de caracteres Unicode. Esto se hace iterando los puntos de código y emitiendo los caracteres correspondientes. Con Python, esto se hace en unas pocas líneas de código:
# `range` comienza en `32` porque los caracteres de control salen con un valor menor
# Establecer conjunto de caracteres ASCII
for code_point in range(32, 128):
print(code_point, hex(code_point), chr(code_point))
# Establecer ISO Latin-1
for code_point in range(32, 256):
print(code_point, hex(code_point), chr(code_point))pythonBiblioteca de programas ICU
Los componentes internacionales para Unicode (“International Components for Unicode”, ICU), se combinan en una biblioteca de programas proporcionada por el Consorcio Unicode. La biblioteca se publica bajo una licencia de código abierto y puede utilizarse en muchos sistemas operativos. El software se utiliza para la internacionalización programática (“internationalization”, a menudo abreviado como “i18n”). Sus áreas de aplicación incluyen:
- Tratamiento de textos Unicode
- Soporte de expresiones regulares en Unicode
- Análisis y formato de los datos del calendario, la hora, los números, las monedas y los mensajes
La biblioteca ICU está disponible en dos versiones:
- “icu4c” está escrito en C/C++ y proporciona una API para estos lenguajes.
- “icu4j” está escrito en Java y proporciona una API para este lenguaje.
El uso de los componentes ofrece resultados consistentes independientemente de la plataforma subyacente.
Especificación del conjunto de caracteres en la cabecera de los documentos HTML
La mayoría de los documentos HTML actuales están codificados en UTF-8. Para asegurarse de que los visitantes de la página vean el documento sin caracteres incorrectos, se debe colocar una etiqueta meta con la declaración del “Charset” en la sección Head del documento HTML. Esto le dice al navegador que interprete el documento cargado como UTF-8, y tiene la siguiente apariencia:
<head>
<meta charset="utf-8">
<!—otros elementos de la cabecera -->
</head>htmlFuentes de Instagram
La popular red social Instagram no permite formatear el texto en la biografía, publicaciones o historias. Esto limita las posibilidades creativas de los usuarios. Sin embargo, algunos desarrolladores han encontrado una solución ingeniosa: Instagram utiliza Unicode, lo que permite componer textos que parecen estar formateados a partir de caracteres especiales. En particular, se utilizan caracteres que se asemejan a las letras latinas. La manera más sencilla de generar este tipo de texto es utilizando un generador de fuentes de Instagram. Además, el uso de fuentes de Instagram también funciona en otras redes sociales.

