En este artículo aprenderemos qué es la codificación Unicode, explicando su origen, los motivos de su creación y su aplicación en HTML. Este artículo forma parte de la serie codificación de caracteres. Una serie de artículos donde se explica qué es la codificación de caracteres y por qué es tan importante en el contexto informático, especialmente en el desarrollo web.
El desarrollo web moderno sería impensable sin la codificación de caracteres Unicode. El sistema de codificación Unicode revolucionó la manera en que representamos texto, superando las limitaciones de sus predecesores y permitiendo que aplicaciones y sitios web soporten múltiples idiomas y símbolos de manera consistente.
Origen de Unicode
Unicode fue desarrollado en 1991 por el consorcio Unicode, un grupo de empresas tecnológicas que buscaban una solución universal para la codificación de texto. El objetivo era reemplazar sistemas fragmentados y redundantes como ASCII o ISO-8859, que funcionaban bien localmente pero no podían convivir fácilmente en aplicaciones internacionales.
Con la codificación Unicode, cada carácter tiene un código único llamado punto de código, representado en formato hexadecimal en un rango desde U+0000 hasta U+FFFF (65.536 caracteres). Cada número corresponde a una letra, símbolo o incluso emojis. Esta página gigante de códigos se llama «Plano Multilingüe Básico o BMP en inglés» y es la base para que los ordenadores sepan cómo mostrar cualquier letra o símbolo correctamente.
El éxito de Unicode reside en que éste BMP incluye los mismos códigos para los caracteres antiguos de ASCII o ISO-8859, manteniendo su compatibilidad. Por ejemplo, el código Unicode exadecimal U+0041
es la letra «A», la cual corresponde al código decimal 65 en ASCII. Ambos son el mismo código pero en bases diferentes, conservando su compatibilidad. Pero a diferencia de la codificación ASCII extendido que utiliza 1 byte con 256 caracteres posibles, en el rango Unicode U+0000 a U+FFFF existe mucho más espacio para añadir caracteres como:
- Las letras y números del alfabeto latino.
- Las letras de otros idiomas como el griego, el cirílico y el hebreo.
- Algunos símbolos matemáticos, puntuación y emojis básicos.
Esto permitió añadir a Unicode, en la medida de los posible, las mismas tablas de caracteres ya existentes manteniendo la compatibilidad con sus codificaciones. Pero Unicode abarca mucho más.
Los planos de Unicode
Hemos dicho que el plano BMP de Unicode puede contener 65.536 caracteres de U+0000 a U+FFFF. Pero Unicode consigue abarcar todos los idiomas del mundo gracias a que tiene mucho más espacio en los llamados planos suplementarios. Actualmente, la codificación Unicode define 17 planos diferentes, lo que da un total de más de 1 millón de caracteres posibles. Para conseguir esta proeza los planos se numeran del 0 al 16 y cada uno abarca un rango diferente de códigos.
- Plano 0 Basic Multilingual Plane (BMP): U+0000 a U+FFFF Este es el plano más conocido y utilizado. Incluye la mayoría de los caracteres para los idiomas modernos, así como varios símbolos. Contiene caracteres ASCII, latín, griego, cirílico, árabe, hebreo, chino básico, entre otros.
- Plano 1 Supplementary Multilingual Plane: U+10000 a U+1FFFF Este plano incluye caracteres históricos, como aquellos para lenguas antiguas (jeroglíficos egipcios, escritura cuneiforme, etc.), además de algunos emojis modernos. También contiene símbolos para algunas lenguas raras y caracteres para transcripciones fonéticas.
- Plano 2 Supplementary Ideographic Plane: U+20000 a U+2FFFF Este plano está dedicado a caracteres chinos adicionales que no estaban en el BMP. Incluye más caracteres utilizados para el chino, japonés y coreano, con el objetivo de cubrir más variaciones de estos idiomas.
- Plano 3 Tertiary Ideographic Plane: U+30000 a U+3FFFF Este plano también está dedicado a caracteres chinos adicionales y algunos caracteres de otros idiomas asiáticos. Es una extensión que se utiliza menos que los otros planos.
- Plano 4 Supplementary Special-Purpose Plane: U+40000 a U+4FFFF Este plano contiene caracteres especializados para necesidades más específicas, como caracteres para la notación musical, matemáticas, o notaciones técnicas.
- Plano 5 Supplementary Special-Purpose Plane: U+50000 a U+5FFFF Similar al plano 4, pero para más caracteres que no se utilizan frecuentemente. Incluye caracteres adicionales para ciertos alfabetos y no se usa en contextos comunes.
- Plano 6 Supplementary Ideographic Plane: U+60000 a U+6FFFF Este plano es otra extensión para caracteres ideográficos, complementando a los planos anteriores con caracteres adicionales utilizados en la escritura de algunas lenguas asiáticas.
- Plano 7 Supplementary Special-Purpose Plane: U+70000 a U+7FFFF Al igual que los planos 4 y 5, este plano contiene caracteres adicionales para símbolos especializados.
- Plano 8 Supplementary Special-Purpose Plane: U+80000 a U+8FFFF Este plano contiene caracteres aún más especializados, para contextos como la matemática avanzada y notaciones científicas.
- Plano 9 Supplementary Special-Purpose Plane: U+90000 a U+9FFFF Similar a los planos 4, 5, 7 y 8, pero con otros caracteres que sirven para notaciones más técnicas y específicas.
- Plano 10 Supplementary Ideographic Plane: U+A0000 a U+AFFFF Este plano contiene más caracteres adicionales de ideogramas, principalmente para usos asiáticos, completando las escrituras tradicionales.
- Plano 11 Supplementary Ideographic Plane: U+B0000 a U+BFFFF Caracteres adicionales que sirven para los mismos fines que el plano 10.
- Plano 12 Supplementary Ideographic Plane: U+C0000 a U+CFFFF Continuación de los planos anteriores con más caracteres de ideogramas y de escritura asiática.
- Plano 13 Supplementary Special-Purpose Plane: U+D0000 a U+DFFFF Este plano contiene caracteres para notaciones más especializadas y técnicas.
- Plano 14 Supplementary Special-Purpose Plane: U+E0000 a U+EFFFF Carácter reservado para más símbolos y notaciones técnicas, de especial uso.
- Plano 15 Supplementary Ideographic Plane: U+F0000 a U+FFFFF Ampliación final para los caracteres ideográficos.
- Plano 16 Supplementary Ideographic Plane: U+100000 a U+10FFFF Este es el último plano y está destinado a caracteres futuros, que aún no han sido asignados. Es un espacio reservado para posibles ampliaciones del estándar Unicode en el futuro.
Unicode, por lo tanto, proporciona un rango muy amplio de caracteres que no solo incluyen los alfabetos y símbolos modernos, sino también aquellos de escrituras antiguas, matemáticas, ciencias y diversos otros campos. Cada uno de estos planos permite que el estándar Unicode sea tan versátil y expansible. Puedes consultar los planos Unicode en https://www.unicode.org/charts/.
Los bloques de Unicode
Puesto que un plano puede abarcar miles de caracteres y contener diferentes tipos de alfabetos e idiomas, la codificación Unicode no suele mostrar los planos completos, sinó que los divide en bloques más pequeños y manejables. Esto hace más fácil consultar y encontrar un grupo específico de caracteres según su uso o tipo.
De esta forma tenemos que un bloque en Unicode es simplemente un rango de caracteres que están agrupados por un propósito o script en particular. Por ejemplo:
- Los caracteres latinos básicos están en un bloque.
- Los caracteres griegos tienen su propio bloque.
- Los emoticonos están en otro bloque.
Puedes consultar los diferentes tipos de bloques en https://www.babelstone.co.uk/Unicode/babelmap.html.
¿Cómo funciona Unicode?
Ahora que sabemos que Unicode utiliza un código único de U+0000 a U+FFFF en 17 planos diferentes, para su funcionamiento se usa algo llamado codificación por longitud variable. Esto significa que los caracteres más comunes como en el BMP se representan con 2 bytes (16 bits), pero los caracteres de los planos suplementarios necesitan más bytes.
Aquí es donde entran los formatos UTF-8, UTF-16 y UTF-32, que trabajan con longitudes de bytes diferentes y traducen los puntos de código de Unicode a formatos binarios para que los ordenadores puedan procesarlos. De esta manera, según el plano con el que estamos trabajando, los caracteres pueden ser almacenados y transmitidos de forma eficiente. Hablaremos de ello más profundamente en un artículo dedicado a los formatos UTF.
Ahora simplemente debemos entender que el diseño de Unicode y sus codificaciones permite que diferentes sistemas y programas manejen texto de manera uniforme, incluso si los caracteres provienen de idiomas completamente distintos. Mientras que UTF-8, UTF-16 y UTF-32 son las «herramientas prácticas» que convierten esos puntos de código en datos comprensibles por las máquinas.
La codificación Unicode en HTML
Cuando desarrollamos para la web, la codificación Unicode garantiza que el texto se muestre correctamente en navegadores y dispositivos, sin importar el idioma del contenido o el sistema del usuario.
Un aspecto fundamental es el uso de formatos como UTF-8, una implementación de Unicode ampliamente adoptada en el desarrollo web. UTF-8 es eficiente porque transforma caracteres comunes en secuencias de menos bytes y utiliza más bytes solo para representar caracteres menos comunes.
Ejemplo básico en HTML:
Para asegurarte de que tu página web utiliza la codificación Unicode, incluye esta declaración en la cabecera del HTML:
<meta charset="UTF-8">
Esta línea indica al navegador que debe interpretar el contenido de la página utilizando el formato UTF-8 de Unicode. Ahora la página puede utilizar cualquier código UNICODE del BMP y su contenido se mostrará correctamente, lo que evita problemas de visualización como caracteres extraños o ilegibles. En próximos artículos aboradaremos este tipo de problemas que suelen darse al mezclar distintas codificaciones en una misma página HTML como por ejemplo ANSI.
Codificación Unicode
La codificación Unicode marcó un antes y un después en el desarrollo web al ofrecer una solución integral a los desafíos de representación de texto. Gracias a Unicode, podemos crear aplicaciones y sitios web verdaderamente universales que se adaptan a las necesidades lingüísticas y culturales de un público global.
En los próximos artículos de esta serie, explicaremos cómo la codificación Unicode trabaja en conjunto con otros formatos como UTF-8, así como los problemas comunes que resuelve y las mejores prácticas para implementarlo en tus proyectos web.
¡ Espero que este artículo sea de vuestro interés !