El juego de caracteres UTF-8

En esta lección se explica qué es un juego de caracteres informático y, concretamente, qué es el juego de caracteres UTF-8 y su uso en HTML.

Tras esta lección se recomienda leer las lecciones:

Bits

En informática, los números no se guardan en notación decimal (con las cifras del 0 al 9), sino en notación binaria, utilizando únicamente el 0 y el 1. Como en la notación decimal, para escribir números, se utilizan varias cifras seguidas.

Estos son los primeros números naturales escritos en notación dedcimal y binaria:

Decimal 0 1 2 3 4 5 6 7 8 ...
Binaria 0 1 10 11 100 101 110 111 1000 ...

En notación decimal, con n cifras podemos escribir 10n números. Es decir, con 1 cifra podemos escribir 10 números (del 0 al 9), con 2 cifras podemos escribir 100 números (del 00 al 99), con 3 cifras podemos escribir 1000 números (del 000 al 999).

En notación binaria, con n cifras podemos escribir 2n. Es decir, con 1 cifra podemos escribir 2 números (0 y 1), con 2 cifras podemos escribir 4 números (del 00 al 11, es decir, del 0 al 3), con 3 cifras podemos escribir 8 números (del 000 al 111, es decir, del 0 al 7).

A las cifras binarias se les llama bit, es decir el número binario 1001 es un número de 4 bits, de la misma manera que el número decimal 329 es un número de 3 cifras.

Bytes

Para realizar su trabajo más rápido, los ordenadores no trabajan con cifras individuales (bits), sino con varias cifras a la vez simultáneamente. La agrupación más utilizada es el byte, que es la agrupación de 8 bits. Un byte puede representar por tanto 256 valores distintos (28, del 00000000 al 11111111, es decir, del 0 al 255).

A medida que ha avanzado la informática, los ordenadores han ido trabajando con grupos de bits cada vez más grandes. En 1981, el primer PC tenía un procesador que trabajaba con grupos de 8 bits (1 byte). En 1984 los PCs empezaron a utilizar procesadores de 16 bits (2 bytes). En 1985 los PCs empezaron a utilizar procesadores de 32 bits (4 bytes). En 2003 los PCs empezaron a utilizar procesadores de 64 bits (8 bytes). Actualmente no existen PCs con procesadores de 128 bits (16 bytes), pero algunos componentes de los PCs ya trabajan con grupos de 256 o incluso 512 bits.

El byte se utiliza en Informática como unidad de medida en el almcenamiento de información (capacidad de los discos duros o memorias). Como las capacidades son tan grandes, se expresan en múltiplos: Kilobyte, Megabyte, Gigabyte, Terabyte, etc. Hay que tener en cuenta que, en este contexto, Kilo no significa mil (1000), sino 1024, ya que 1024 es una potencia de dos (210= 1024), Mega no significa millón sino 1.048.576 (1024 x 1024), etc.

El juego de caracteres ASCII

En Informática toda la información se guarda en forma numérica, por lo que para guardar caracteres (letras, números, signos de puntuación, etc.) se necesita establecer una correspondencia entre los códigos numéricos y los caracteres. Al conjunto de correspondencias se le llama juego de caracteres. Los primeros ordenadores usaban cada uno su propio juego de caracteres, pero en los años 50 empezaron a proponerse estándares que facilitasen la comunicación entre diferentes sistemas. En los años 60 se creó el código ASCII, que definía 128 caracteres (33 caracteres de control y 95 imprimibles -letras minúsculas, mayúsculas, cifras, puntuación, etc.-) y que se convirtió en el estándar en informática.

En el código ASCII cada carácter ocupaba precisamente 1 byte, es decir, 8 bits: 7 bits para codificar los 128 caracteres y 1 bit de paridad para comprobar errores. Ese juego de caracteres era suficiente para el idioma inglés, pero era insuficiente para otros idiomas, por lo que a medida que la informática se extendía por el mundo se tuvieron que crear otros juegos de caracteres.

Pero pronto los juegos de caracteres se encontraron con barreras importantes:

El juego de caracteres universal: Unicode

La llegada de Internet y el aumento consiguiente del intercambio de información entre diferentes países hizo aún más patente la necesidad de creación de un juego de caracteres universal, que abarcara las necesidades de toda la humanidad. La idea se empezó a trabajar en 1987 y en 1991 se publicó la primera versión de Unicode, que utilizaba dos bytes para codificar cada carácter.

Versiones de Unicode Unicode 1990 1995 2000 2005 2010 2015 2020 1.0 1.1 2.0 2.1 3.0 3.1 3.2 4.0 4.1 5.0 5.1 5.2 6.0 6.1 6.2 6.3 7.0 8.0 9.0 10.0

La principal ventaja de Unicode es que permite que la información guardada pueda ser interpretada correctamente por cualquier sistema informático. Por esa razón, cualquier comunidad tiene interés en incluir su sistema de escritura en Unicode, no solamente las lenguas en uso actual sino también las lenguas muertas, símbolos y pictogramas. Por ello Unicode no ha dejado de crecer y actualmente (junio de 2017) la última versión publicada, Unicode 10.0, contiene más de 135.000 caracteres. Los dos bytes de la propuesta inicial se quedaron cortos y la norma actual utiliza cuatro byes para codificar los caracteres.

El inconveniente de utilizar 4 bytes para codificar los caracteres es que se ocupa cuatro veces más espacio que codificando con un byte y se necesita cuatro veces más tiempo para transmitirlos. Para optimizar, se decidió que los primeros valores de Unicode coincidieran con los de ASCII, de manera que los textos ingleses pudieran seguir utilizando un byte por carácter. Aunque el tema es bastante complejo, se puede decir que existen tres opciones:

Desde 2008, UTF-8 es el formato más utilizado en la web y es también el formato recomendado en estos apuntes.

Se puede consultar el juego de caracteres Unicode completo, dividido en secciones correspondientes a sistemas de escritura y conjuntos de símbolos.

Juegos de caracteres en páginas web

En las primeras versiones de HTML se especificaba que el juego de caracteres utilizado por las páginas web debía ser el juego de caracteres ISO-8859-1, más conocido como Latin-1.

En 1997 con la norma RFC 2070 se permitió el juego de caracteres ISO 10646 (equivalente a Unicode).

En 2014, la recomendación HTML 5 prácticamente exige el uso de UTF-8.

Tipos de letra Unicode

Para poder mostrar los caracteres Unicode, se necesita disponer de tipos de letra que los incluyen.

Cada sistema operativo incluye sus propios tipos de letra predeterminados, que poco a poco van incluyendo más caracteres Unicode

Actualmente existen varios proyectos de creación de tipos de letra libres que incluyan todos los caracteres Unicode:

Estas fuentes se pueden emplear en una página web utilizando el mecanismo de las fuentes web, que se comenta en la lección CSS: Fuentes web

Pictogramas en Unicode

Unicode no solamente contiene caracteres para todas las lenguas del mundo, sino que también incluye una grana cantidad de pictogramas. Un gran parte de ellos son símbolos gráficos e iconos de ampklia difusión que ya estaban incluidos en juegos de caracteres anteriores, pero a partir de 2010 se están incorporando también imágenes más sofisticadas, como los emoticonos o los emojis, creados en Japón a finales de los 90 para los dispositivos móviles.

La última versión de Unicode (Unicode 9.0, publicada en junio de 2016) contiene en total casi 1500 símbolos gráficos, clasificados en varios grupos:

Unicode sigue aceptando nuevos símbolos gráficos (véase Unicode roadmap) que se irán incluyendo en las próximas versiones.

Como hay tantos símbolos gráficos, los he divido en dos páginas:

En la página Símbolos gráficos en Unicode se muestran los caracteres de los siguientes grupos de símbolos gráficos

En la página Dibujos en Unicode se muestran los caracteres de los siguientes grupos de símbolos gráficos:

En la página Secuencias ZWJ se muestran secuencias de caracteres Unicode que también producen pictogramas.