Cómo representan el texto los ordenadores
De ASCII a Unicode y UTF-8: cómo las letras se convierten en números y los números en bits, y cómo los códigos QR llevan texto de cualquier idioma.
Los ordenadores representan el texto convirtiendo cada carácter en un número y almacenando ese número en binario: un recorrido que va desde el ASCII de los años sesenta hasta el moderno Unicode y UTF-8. Esa misma cadena de ideas es lo que permite que un código QR lleve un enlace en inglés, un lema en japonés o un emoji.
En el fondo, un ordenador no tiene ni idea de qué es una letra. Solo almacena números. Entonces, ¿cómo sobrevive «hola» a ser tecleado, guardado, enviado y mostrado de nuevo en un dispositivo distinto? Mediante una serie de acuerdos sobre qué número significa qué carácter. Sigamos el texto desde el esquema más simple hasta el global, y veamos cómo los códigos QR viajan con él. 🐾
¿Cómo almacena una letra un ordenador?
Un ordenador almacena texto asignando a cada carácter un número y guardando después ese número como bits binarios. La letra «A» podría convertirse en el número 65, y 65 se convierte en el patrón de bits 01000001. El libro de reglas que asigna caracteres a números se llama codificación de caracteres, y es simplemente un acuerdo compartido: el mismo principio que hay detrás de toda codificación.
Todo lo que viene después depende de que ambos extremos usen el mismo libro de reglas. Teclea «A», almacena 65, y mientras el lector también acuerde que 65 significa «A», la letra sobrevive intacta al viaje de ida y vuelta. Cambia el libro de reglas a mitad de camino y obtendrás galimatías.
¿Qué es ASCII?
ASCII (el Código Estándar Estadounidense para el Intercambio de Información) fue la respuesta temprana y enormemente influyente. Es una codificación de 7 bits, lo que significa que cada carácter es un número de 0 a 127: 128 posibilidades en total. Eso cubría las letras inglesas mayúsculas y minúsculas, los dígitos del 0 al 9, la puntuación común y un conjunto de códigos de control invisibles como «salto de línea» y «tabulación».
ASCII era simple, compacto y suficientemente bueno para la informática en inglés durante décadas. Como 7 bits caben cómodamente dentro de un byte (8 bits), cada carácter ASCII ocupaba un byte para almacenarse, con un bit de sobra. Pero 128 caracteres no son ni de lejos suficientes para la escritura del mundo: sin letras acentuadas, sin griego, sin chino, sin emoji.
¿Por qué no bastaba ASCII?
El mundo escribe con muchísimos más de 128 caracteres. Los primeros intentos de estirar ASCII usaron el octavo bit sobrante para añadir otros 128 espacios, produciendo docenas de «páginas de códigos» incompatibles: una para los acentos de Europa occidental, otra para el cirílico, y así sucesivamente. El mismo número significaba caracteres diferentes según la página de códigos que se asumiera, de modo que el texto enviado entre regiones se convertía a menudo en un sinsentido.
Lo que el mundo necesitaba era un catálogo universal donde cada carácter —de cada idioma, más símbolos y emoji— tuviera una identidad única e inequívoca. Ese catálogo es Unicode.
ASCII le dio a cada carácter inglés un número. Unicode le da a cada carácter de cada sistema de escritura un número. UTF-8 es la manera ingeniosa de almacenar esos números de forma eficiente.
¿Qué es Unicode?
Unicode es un conjunto de caracteres gigante y universal que asigna a cada carácter un número único llamado punto de código (code point). La «A» latina, la «Ω» griega, la «あ» japonesa y el emoji 😀 reciben cada uno su propio punto de código, y esa identidad nunca cambia entre sistemas o idiomas.
Es importante señalar que Unicode es un catálogo, no un formato de almacenamiento. Dice «este carácter es el punto de código número tal», pero no dicta cómo empaquetar ese número en bytes. Y para mantener la compatibilidad con el pasado, los primeros 128 puntos de código de Unicode son idénticos a ASCII, de modo que el texto en inglés sencillo tiene los mismos números en ambos. La cuestión de cómo almacenar realmente esos puntos de código es donde entra UTF-8.
¿Qué es UTF-8 y por qué se impuso?
UTF-8 es la forma dominante de almacenar los puntos de código Unicode como bytes, y es un diseño genuinamente elegante. Es una codificación de longitud variable: los caracteres comunes ocupan menos bytes, los más raros ocupan más.
- Los caracteres ASCII originales ocupan solo 1 byte cada uno, así que cualquier texto en inglés sencillo es automáticamente UTF-8 válido, sin cambios.
- La mayoría de los demás caracteres comunes, incluidas las letras latinas acentuadas, el griego, el cirílico y el hebreo, ocupan 2 bytes.
- Caracteres como el chino, el japonés y el coreano suelen ocupar 3 bytes.
- Los emoji y los símbolos más raros ocupan 4 bytes.
UTF-8 se impuso en la web por buenas razones: es totalmente retrocompatible con ASCII, no desperdicia espacio en textos con mucho inglés y, aun así, puede representar cada carácter de Unicode. Hoy la inmensa mayoría de las páginas web se sirven como UTF-8. Es el estándar universal silencioso que permite que una página mezcle idiomas con libertad.
¿Cómo llevan texto los códigos QR?
Un código QR almacena bits, así que para llevar texto necesita una codificación de caracteres igual que cualquier ordenador. El estándar QR define varios modos de codificación ajustados a distintos contenidos: un modo numérico para dígitos, un modo alfanumérico para un conjunto limitado de letras mayúsculas y símbolos (eficiente para cosas como URL en mayúsculas) y un modo byte para datos arbitrarios.
Ese modo byte es la clave del texto multilingüe: normalmente lleva UTF-8, lo que significa que un código QR puede contener cualquier carácter Unicode —japonés, árabe, emoji, todo ello— exactamente como lo haría una página web. Cuando tu escáner lee un código que contiene texto que no está en inglés y lo muestra correctamente, está decodificando esos bytes UTF-8 de vuelta a puntos de código y luego a caracteres. Los detalles están en modos de codificación de los códigos QR y codificación de caracteres y códigos QR.
¿Por qué importa el modo de codificación para la capacidad?
Los distintos modos cuestan diferentes números de bits por carácter, así que la codificación afecta directamente a cuánto cabe en un código. Los dígitos puros se empaquetan de forma compacta; el conjunto alfanumérico restringido es bastante eficiente; el modo byte de UTF-8 completo es el más flexible, pero usa más bits por carácter, especialmente para las escrituras multibyte.
Por eso un código QR que contiene una URL corta en inglés puede seguir siendo pequeño y disperso, mientras que un código del mismo tamaño que contiene un párrafo en chino debe ser más denso o más grande. El equilibrio entre lo que codificas y cuánto espacio ocupa se detalla en capacidad de datos de un código QR. Elegir el modo adecuado para tu contenido mantiene los códigos pequeños y fáciles de escanear.
La representación del texto en una frase
Los ordenadores almacenan el texto como números en binario, usando codificaciones compartidas que crecieron desde el ASCII de 7 bits hasta los puntos de código universales de Unicode, almacenados de forma eficiente como UTF-8: el mismo esquema que los códigos QR usan en modo byte para llevar cualquier idioma de la Tierra.
¿Quieres codificar tu propio texto en una cuadrícula escaneable? Puedes crear un código QR gratis con QR Puppy: maneja el texto multilingüe y los emoji sin complicaciones.
Preguntas frecuentes
¿Cuál es la diferencia entre Unicode y UTF-8?
Unicode es el catálogo que da a cada carácter un número único llamado punto de código, mientras que UTF-8 es una forma específica de almacenar esos números como bytes. Unicode dice cuál es la identidad de un carácter; UTF-8 decide cuántos bytes hacen falta para guardarlo.
¿Sigue siendo relevante ASCII?
Muchísimo. Sus primeros 128 caracteres son idénticos a los de Unicode, y UTF-8 los almacena en un solo byte, así que todo el texto en inglés sencillo es automáticamente UTF-8 válido. ASCII pervive como el núcleo compatible de la codificación moderna.
¿Puede un código QR contener texto que no esté en inglés?
Sí. Usando el modo byte con UTF-8, un código QR puede llevar cualquier carácter Unicode, incluidos el chino, el árabe y los emoji. El escáner decodifica los bytes UTF-8 de vuelta a los caracteres originales, igual que hace un navegador web.
¿Por qué a veces el mismo carácter aparece como símbolos ilegibles?
Porque el lector usó una codificación distinta de la que pretendía el escritor, de modo que los números se interpretaron con el libro de reglas equivocado. Acordar UTF-8 entre sistemas es lo que evita este problema tan común del «mojibake».
¿El texto multilingüe hace más grande un código QR?
Puede hacerlo. Los caracteres que no están en inglés a menudo ocupan varios bytes en UTF-8, así que un código que los contiene lleva más bits y se vuelve más denso o necesita una versión más grande que la misma cantidad de texto en inglés sencillo.
Crea un código QR de forma honesta 🐾
Gratis para siempre, sin rastreo, sin caducidad — generado en tu propio navegador.