Saltar al contenido principal
🔣 Estándares entre lenguajes Estándar: Unicode 17.0 / RFC 3629 / IETF Time: 9 min de lectura Revisado: septiembre de 2024

Codificación de caracteres: ASCII a UTF-8

Una guía arquitectónica fundamental sobre la codificación de caracteres: ASCII, ISO-8859-1, Windows-1252 y el dominio global moderno de UTF-8.

TL;DR — Respuesta directa

Respuesta técnica directa

La codificación de caracteres asigna símbolos de texto humano a números binarios que las computadoras pueden almacenar y procesar. Las codificaciones heredadas tempranas (ASCII, ISO-8859-1, Windows-1252) usaban 7 u 8 bits y provocaban corrupción generalizada del texto (mojibake) por páginas de códigos incompatibles. Hoy, UTF-8 es el estándar universal global y representa los 1.114.112 puntos de código Unicode con compatibilidad retroactiva con ASCII.

💡
Regla de producción: Use siempre UTF-8 en todos los límites de la aplicación: esquemas de base de datos (utf8mb4 en MySQL), cabeceras HTTP Content-Type, etiquetas HTML <meta charset="utf-8"> y E/S de archivos.

La evolución de las codificaciones de texto

Cómo los sistemas informáticos pasaron de las páginas de códigos propietarias de 8 bits a un único estándar global unificado.

1. ASCII (1963): el fundamento de 7 bits

ASCII definió 128 caracteres (0–127): letras inglesas, números y puntuación básica. Como los bytes tienen 8 bits, el 8.º bit quedó originalmente sin usar o se empleó para comprobaciones de paridad.

2. El caos de 8 bits: ISO-8859 y las páginas de código de Windows

Con la internacionalización de las computadoras, distintas regiones usaron las 128 posiciones superiores (128–255) para sus escrituras locales. Europa occidental usó ISO-8859-1, el cirílico ISO-8859-5, y Windows creó Windows-1252. Un archivo guardado en una página de códigos y abierto en otra producía mojibake (p. ej., «café» se convertía en «café»).

3. Unicode y UTF-8: la solución definitiva

Unicode unificó todos los sistemas de escritura humanos en un único espacio de código compartido. Ken Thompson y Rob Pike diseñaron UTF-8 en 1992 para serializar Unicode en bytes de longitud variable conservando una compatibilidad retroactiva del 100 % con ASCII.

Declarar UTF-8 en toda la pila web para eliminar el mojibake

HTML utf8-declaration.html
<!-- 1. HTML5 document charset declaration (must be in top 1024 bytes) -->
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>UTF-8 Web Document</title>
</head>
<body>
  <p>Hello world • Café • 東京 • 🚀</p>
</body>
</html>
Salida del programa
Hello world • Café • 東京 • 🚀

Por qué UTF-8 ganó la web

Hoy, más del 98 % de todos los sitios web y los sistemas operativos modernos usan UTF-8.

Compatibilidad retroactiva con ASCII

Cualquier archivo ASCII válido ya es UTF-8 válido sin necesidad de conversión.

Autosincronización y robustez

Los bytes de continuación siempre empiezan con los bits 10xxxxxx, lo que permite a los analizadores encontrar trivialmente el inicio del siguiente carácter incluso con datos corruptos.

Sin problemas de endianness

UTF-8 es un flujo de bytes de 8 bits, lo que elimina la confusión de endianness de la marca de orden de bytes (BOM).

Errores comunes frente a patrones de producción

Aprenda qué patrones fallan en producción y cuáles son las alternativas modernas conformes con los estándares.

Configurar MySQL para Unicode

Cotejamiento y juegos de caracteres de tablas de base de datos.
EVITAR: ❌ Juego de caracteres «utf8» heredado en MySQL
CREATE TABLE users (
  name VARCHAR(50)
) CHARACTER SET utf8; -- In MySQL, utf8 supports ONLY 3 bytes (BMP)!
Por qué falla: El juego de caracteres «utf8» histórico de MySQL solo admite caracteres de hasta 3 bytes y lanza un error fatal o trunca las cadenas al recibir emojis de 4 bytes.
RECOMENDADO: ✅ Juego de caracteres utf8mb4
CREATE TABLE users (
  name VARCHAR(50)
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Por qué es mejor: utf8mb4 es UTF-8 real y admite por completo todos los caracteres suplementarios de 4 bytes y los emojis modernos.

Matriz de casos límite e invariantes

Una matriz de pruebas diversa entre caracteres que compara el comportamiento de los caracteres en ASCII, marcas combinantes, emojis, banderas y fragmentos sustitutos.

Caso de prueba Glifo de entrada Unidades de código Puntos de código Grafemas Categoría Explicación técnica
Patrón de mojibake café Standard

Procedencia de estándares y fuentes

Todos los invariantes técnicos, las API y los comportamientos de esta guía se verifican contra las especificaciones primarias oficiales.

Unicode Consortium

The Unicode Standard, Version 17.0

Cláusula: §2 General Architecture

IETF

RFC 3629: UTF-8, a transformation format of ISO 10646

Cláusula: §1 Introduction