Qué es UTF-8
Este artículo se lee en unos 4 minutos.
Páginas web, APIs, cabeceras de correo, bases de datos - el estándar de facto de la codificación de caracteres moderna es UTF-8.Representa los puntos de código Unicode en longitud variable de 1 a 4 bytes, manteniendo compatibilidad con ASCII y pudiendo manejar todos los caracteres Unicode, incluidos los emojis. Funciona como infraestructura de distribución de texto digital en lugares que normalmente no percibimos.
Definición
UTF-8 (8-bit Unicode Transformation Format) es una de las formas de codificación que convierte puntos de código Unicode en secuencias de bytes. Fue diseñada por Ken Thompson y Rob Pike en 1992 y posteriormente estandarizada como RFC 3629. Representa todo el rango Unicode (U+0000 a U+10FFFF) con 1 a 4 bytes por carácter.
Estructura de bytes
| Rango de puntos de código | Bytes | Ejemplos |
|---|---|---|
| U+0000 - U+007F | 1 byte | ASCII (a, A, 0, !) |
| U+0080 - U+07FF | 2 bytes | Latín extendido, griego, cirílico |
| U+0800 - U+FFFF | 3 bytes | Japonés, chino, coreano |
| U+10000 - U+10FFFF | 4 bytes | Emojis, escrituras antiguas, kanji suplementarios |
Compatibilidad con ASCII
Una característica de diseño clave de UTF-8 es que representa ASCII (U+0000 - U+007F) directamente en 1 byte. Un archivo compuesto solo por caracteres alfanuméricos y símbolos de medio ancho se interpreta con la misma secuencia de bytes tanto como ASCII como UTF-8. Esta retrocompatibilidad, que permite a las herramientas de procesamiento de texto ASCII existentes manejar archivos UTF-8 sin dañarlos, impulsó su adopción en la web.
Comparación con UTF-16 / UTF-32
| Formato | Por carácter | Uso principal | Manejo de emojis |
|---|---|---|---|
| UTF-8 | 1 a 4 bytes | Web, API, archivos | 4 bytes |
| UTF-16 | 2 o 4 bytes | Representación interna de Java, JS | Par sustituto, 4 bytes |
| UTF-32 | 4 bytes fijos | Procesamiento interno (raro) | 4 bytes fijos |
Su posición como estándar web
El W3C recomienda UTF-8 como codificación de caracteres en HTML5, y más del 98% de las páginas web modernas se sirven en UTF-8. Cabeceras HTTP, JSON, XML, cuerpo de correos, nombres de archivo, codificación porcentual de URLs - UTF-8 es la base en todos los rincones de la web. Prácticamente no hay razón para elegir otra codificación en un proyecto nuevo.
BOM (Byte Order Mark)
Existe la práctica de añadir los 3 bytes EF BB BF como BOM al inicio de un archivo UTF-8, pero el estándar web no recomienda el BOM en UTF-8. Los archivos UTF-8 con BOM son generados por herramientas antiguas de Windows (como el Bloc de notas), y en herramientas de Linux / Mac y servidores web pueden causar problemas al ser tratados como bytes inesperados. La práctica moderna es guardar los archivos sin BOM.
Consideraciones prácticas
- Confusión entre caracteres y bytes: un carácter CJK ocupa 3 bytes en UTF-8 y un emoji 4 bytes. Juzgar la longitud por bytes genera confusión con caracteres multibyte
- Juego de caracteres de la base de datos: el
utf8de MySQL en realidad solo maneja hasta 3 bytes, una implementación incompleta. Para emojis hay que elegirutf8mb4 - Codificación de URL: incluir caracteres CJK o emojis en una URL implica codificar la secuencia de bytes UTF-8 con codificación porcentual
- Lectura de archivos: abrir un archivo UTF-8 erróneamente como Shift_JIS produce caracteres corruptos (habitual con CSV antiguos)
Errores comunes
- ❌ «UTF-8 es de 8 bits fijos» → ✅ Es de longitud variable con 8 bits como unidad mínima
- ❌ «UTF-8 es más lento que UTF-16» → ✅ Depende del contenido y del procesamiento. Con mucho texto CJK, UTF-16 puede ser más corto
- ❌ «El BOM es obligatorio» → ✅ En UTF-8, lo estándar es no usar BOM