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.
| Rango | Contenido |
|---|---|
| 0 a 31 | Caracteres de control, no imprimibles. |
| 32 a 126 | Caracteres imprimibles: espacio, signos, dígitos y letras. |
| 127 | Cará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 caracteres | Qué lo caracteriza |
|---|---|
| EBCDIC | Codificació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-15 | Revisión del anterior que sí incorpora el euro. Al igual que en ASCII, la A mayúscula sigue siendo el 65. |
| Windows-1252 | La versión de Latin-1 que usa Windows, conocida como Windows Latin-1. |
| ISO 10646 | El 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ón | Unidad mínima | Longitud |
|---|---|---|
| UTF-8 (8 bit Unicode Transformation Format) | 8 bits | Variable, de 1 a 4 bytes. Los caracteres de 1 byte coinciden exactamente con ASCII. |
| UTF-16 | 16 bits | Variable, 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