Saltar al contenido

Juegos de caracteres

Cómo se le asigna un número a cada letra, del ASCII de 7 bits a Unicode, y por qué un mismo texto ocupa distinto según la codificación con que se guarde.

ASCII

ASCII fue el primer juego de caracteres de uso general. Usa 7 bits, con lo que numera 128 caracteres, y añade un octavo bit de paridad para detectar errores de transmisión. Ese es el motivo de que se hable de ASCII de 7 bits aunque cada carácter viaje en un byte.

RangoContenido
0 a 31Caracteres de control, no imprimibles.
32 a 126Caracteres imprimibles: espacio, signos, dígitos y letras.
127Carácter de control (DEL), no imprimible.

Su limitación es evidente para el español: en ASCII no existen el euro, la eñe ni ninguna letra acentuada. Un dato que conviene tener memorizado porque se pregunta directamente: la letra A mayúscula es el 65.

Imprimibles del 32 al 126. Todo lo que queda por debajo del 32, más el 127, son controles.

Para el examen

  • Bits: 7

  • Caracteres: 128

  • Imprimibles: del 32 al 126

  • La «A» mayúscula: el 65

  • Octavo bit: de paridad

EBCDIC, ISO 8859 y las páginas de códigos

Cuando 128 caracteres se quedaron cortos aparecieron juegos de 8 bits, con 256 posiciones. El problema es que no hubo uno solo, sino muchos, y cada tabla se conoce como página de códigos o codepage. Dos textos idénticos guardados con páginas distintas se leen mal el uno en el sitio del otro.

Juego de caracteresQué lo caracteriza
EBCDICCodificación de 8 bits propia de los mainframes de IBM. Cada país tenía su tabla, y cada una de esas tablas es una página de códigos.
ISO 8859-1 (Latin-1)Juego de 8 bits reales. Incluye la eñe y las letras acentuadas, pero no tiene el símbolo del euro.
ISO 8859-15Revisión del anterior que sí incorpora el euro. Al igual que en ASCII, la A mayúscula sigue siendo el 65.
Windows-1252La versión de Latin-1 que usa Windows, conocida como Windows Latin-1.
ISO 10646El Conjunto de Caracteres Universal (UCS): un único repertorio pensado para dar cabida a todas las escrituras.

Los juegos derivados del ASCII conservan sus primeras 128 posiciones, y por eso un texto en inglés se lee igual en casi todos. La divergencia empieza justo a partir del carácter 128, que es donde cada tabla coloca lo suyo.

Para el examen

  • ISO 8859-1 (Latin-1): tiene la eñe, pero no el símbolo del euro

  • ISO 8859-15: el que añade el euro

  • EBCDIC: código de 8 bits de los mainframes de IBM

  • ISO 10646: define el repertorio universal de caracteres (UCS)

UTF-8 y UTF-16

Una cosa es el repertorio de caracteres, que asigna un número a cada símbolo, y otra la codificación, que decide con cuántos bytes se escribe ese número. UTF-8 y UTF-16 son dos codificaciones del mismo repertorio universal, y las dos son de longitud variable.

CodificaciónUnidad mínimaLongitud
UTF-8 (8 bit Unicode Transformation Format)8 bitsVariable, de 1 a 4 bytes. Los caracteres de 1 byte coinciden exactamente con ASCII.
UTF-1616 bitsVariable, de 2 a 4 bytes: una o dos palabras de 16 bits, y cada palabra son 2 bytes.

La compatibilidad con ASCII es la gran ventaja práctica de UTF-8: un documento que solo use caracteres ingleses es byte a byte idéntico a su versión ASCII, y los caracteres menos frecuentes son los que gastan más bytes.

Hay una diferencia más que suele preguntarse. UTF-8 no depende del orden en que la máquina coloque los bytes, porque su unidad es de 8 bits y no hay nada que ordenar. UTF-16 sí, porque sus unidades son de 16 bits: de ahí que existan las variantes big endian y little endian y que se use una marca de orden de bytes (BOM) al principio del archivo para indicar cuál de las dos es.

UTF-8 va de 1 a 4 bytes y es compatible con ASCII; UTF-16 va de 2 a 4 y nunca baja de una palabra de 16 bits.

Para el examen

  • UTF-8: de 1 a 4 bytes, compatible con ASCII y sin problema de orden de bytes

  • UTF-16: de 2 a 4 bytes, con marca de orden (BOM) y variantes BE y LE

Compresión sin pérdida: Huffman

Comprimir sin pérdida significa que al descomprimir se recupera exactamente el original, bit a bit. Es lo que hace falta con un documento, un programa o una base de datos, donde perder un solo byte lo estropea todo, frente a la compresión con pérdida que se admite en fotografía o en audio.

El código Huffman es la técnica clásica de esta familia. La idea es no gastar el mismo número de bits en todos los símbolos: se cuenta cuántas veces aparece cada uno y se asignan códigos cortos a los frecuentes y códigos largos a los raros. Como en un texto en español la letra e aparece muchísimo más que la k, el resultado global ocupa menos.

Es el algoritmo que interviene en la creación de ficheros gzip, uno de los formatos de compresión más extendidos, y sigue estando presente dentro de muchos otros formatos actuales.

Longitud variable según la frecuencia: lo que más se repite es lo que menos bits gasta.

Para el examen

  • Huffman: compresión sin pérdida: códigos cortos a lo más frecuente

  • Dónde aparece: es una de las piezas de gzip