Los tres términos se usan a menudo como si significaran lo mismo, pero describen capas distintas. Entenderlos explica la mayoría de los errores de codificación de texto.
ASCII: un juego de caracteres pequeño
ASCII define 128 caracteres y los numera del 0 al 127. Cubre las letras inglesas, los dígitos, la puntuación y los códigos de control. No tiene letras acentuadas, ni otros alfabetos, ni emojis.
Unicode: un catálogo de caracteres
Unicode es una lista universal que da a cada carácter de cada sistema de escritura un número único llamado punto de código, que se escribe como U+0041 para la letra A. Actualmente cubre bastante más de 100,000 caracteres entre alfabetos, símbolos y emojis. Los primeros 128 puntos de código de Unicode son los mismos que ASCII. Unicode es el catálogo; no dice cómo guardar los números como bytes.
UTF-8: una forma de guardar los números
UTF-8 es una codificación que convierte los puntos de código en bytes, usando de uno a cuatro bytes por carácter. Los caracteres del rango ASCII ocupan un byte y se ven idénticos a ASCII, mientras que las letras acentuadas suelen ocupar dos bytes y otros alfabetos ocupan tres o cuatro. UTF-8 es la codificación dominante en la web porque es compacta para el texto en inglés y compatible con los datos ASCII antiguos.
Por qué el texto a veces se ve roto
Si un archivo se guarda como UTF-8 pero se abre como Latin-1, los dos bytes que forman una letra acentuada se muestran como dos caracteres separados. La letra e con acento agudo, guardada como los bytes C3 y A9, aparece como una A mayúscula con tilde seguida de un signo de copyright. Este efecto se llama mojibake.
Cómo evitar problemas
- Guarda y sirve el texto como UTF-8 en todas partes.
- Declara la codificación con una etiqueta meta charset en HTML y en las cabeceras HTTP.
- Asegúrate de que tu base de datos y la conexión también usen UTF-8, por ejemplo utf8mb4 en MySQL.
- Inspecciona el texto sospechoso para ver sus puntos de código reales.
Preguntas frecuentes
¿UTF-8 ocupa más que ASCII? Para el texto en inglés ocupa lo mismo. Para otros idiomas ocupa más, pero sigue siendo eficiente.
¿Cuál debo usar en proyectos nuevos? Usa texto Unicode guardado como UTF-8.

