Codificaciones de Caracteres y Unicode: La Guía Definitiva de UTF-8, UTF-16 y más
En los inicios de la informática, representar texto era sencillo: cada carácter cabía en 7 u 8 bits (ASCII). Pero a medida que la informática se globalizó, necesitamos una forma de representar cada carácter de cada idioma del mundo. Esta es la historia de Unicode y las codificaciones que lo impulsan.
1. El Estándar Unicode
Unicode no es una codificación en sí, sino un conjunto de caracteres universal. Asigna un número único, llamado punto de código, a cada carácter (por ejemplo, U+0041 para la 'A'). Sin embargo, todavía necesitamos una forma de almacenar estos números en binario.
UTF-8 (El Rey de la Web)
UTF-8 es una codificación de ancho variable que utiliza de 1 a 4 bytes por carácter. Es retrocompatible con ASCII.
- Pros: Eficiente para idiomas occidentales, robusto contra la corrupción de datos y el estándar universal para la web.
UTF-16
Utiliza 2 o 4 bytes. Es la codificación nativa de Windows (NTFS) y de muchos entornos de programación como Java y JavaScript.
UTF-32
Utiliza exactamente 4 bytes para cada carácter. Aunque es sencillo para la indexación, es muy ineficiente en cuanto a memoria.
2. Codificaciones Heredadas y Regionales
Antes de que Unicode se volviera dominante, las diferentes regiones utilizaban sus propios estándares, muchos de los cuales todavía se encuentran hoy en día.
Codificaciones Chinas (Familia GB)
- GB2312: El estándar inicial para el chino simplificado.
- GBK: Una extensión de GB2312 para admitir más caracteres.
- GB18030: El estándar obligatorio actual en China, que admite chino simplificado y tradicional y se mapea completamente a Unicode.
Codificaciones Japonesas
- Shift-JIS: Históricamente la codificación más popular para el japonés, utilizada extensamente en Windows y sitios web antiguos.
Coreano y Chino Tradicional
- EUC-KR: Una codificación heredada común para el coreano.
- Big5: El estándar para caracteres de chino tradicional utilizado principalmente en Taiwán y Hong Kong.
3. Codificaciones Heredadas Occidentales
ISO-8859-1 (Latin-1)
Una codificación de 8 bits que cubre la mayoría de los idiomas de Europa Occidental.
Windows-1252
Una ligera variación de ISO-8859-1 utilizada por defecto en versiones antiguas de Windows.
4. Matices Técnicos: BOM y Endianness
Marca de Orden de Bytes (BOM)
El BOM es una secuencia especial de bytes al comienzo de un archivo de texto (por ejemplo, EF BB BF para UTF-8). Le indica al software qué codificación y orden de bytes se está utilizando. Aunque es útil para UTF-16, a menudo se desaconseja para UTF-8 en entornos web.
Little Endian vs. Big Endian
Relevante para UTF-16 y UTF-32, se refiere al orden en que se almacenan los bytes en la memoria.
Resumen Comparativo
| Codificación | Bytes por Carácter | Compatibilidad | Mejor Uso |
|---|---|---|---|
| UTF-8 | 1-4 | ASCII | Web, Linux, Mac |
| UTF-16 | 2 o 4 | Ninguna | Windows, Java, JS |
| GB18030 | 1, 2 o 4 | GBK | Cumplimiento del Gobierno Chino |
| ASCII | 1 | Universal | Sistemas heredados, solo inglés |
Conclusión
El mundo se ha decantado mayoritariamente por UTF-8 como estándar para el intercambio de datos. Sin embargo, comprender las codificaciones heredadas como GBK o Shift-JIS sigue siendo vital cuando se trata de sistemas heredados o software regional específico. En caso de duda, utilice siempre UTF-8 sin BOM para aplicaciones modernas.