Codificación de caracteres

Si pudieras ver una conversación entre computadoras, ésta probablemente se verçia así: "010110111011101011010010110...". Éste lenguaje, denominado binario, es el que utilizan las computadoras para comunicarse entre sí o para transmitir datos entre sus componentes. Pero, ¿por qué alguien diseñaría una computadora con un un sistema binario como base en lugar de usar un alfabeto normal? Bueno, la razón es que el sistema binario se adapta perfectamente a la estructura física de los circuitos, donde puedes utilizar sólo dos tipos diferentes de señales: un pulso eléctrico (1) o ninguna señal en absoluto (0).

Pero entonces, estos código son, cuando menos, muy difíciles de comprender. La razón de la existencia de las codificaciones de caracteres tiene que ver con la necesidad de convertir el lenguaje binario de la computadora en algo más comprensible para los seres humanos.

Lo que hace una codificación de caracteres de n bits es separar estos bits (ceros y unos) en grupos de n bits cada uno, y asignar un símbolo a cada secuencia obtenida. De manera simple, una codificación de caracteres (o un conjunto de caracteres) puede ser considerado como una tabla de traducción, donde cada grupo de bits está relacionado a un único carácter. Por ejemplo, una codificación de caracteres de 8 bits podría representar a la secuencia "10010101" como la letra "a", a la secuencia "01101100" como el símbolo "&", y así sucesivamente.

Para arrojar un poco de luz sobre los conceptos tratados en el párrafo anterior, tomaremos una codificación de caracteres en particular que resulta ser una de las más famosas para sistemas occidentales: el ASCII. Esta codificación es muy primitiva y, por consiguiente, simple. La próxima tabla muestra todos los valores de ASCII para las letras mayúsculas (de la A a la Z):

SímboloCódigo binario
A1000001
B1000010
C1000011
D1000100
E1000101
F1000110
G1000111
H1001000
I1001001
J1001010
K1001011
L1001100
M1001101
SímboloCódigo binario
N1001110
O1001111
P1010000
Q1010001
R1010010
S1010011
T1010100
U1010101
V1010110
W1010111
X1011000
Y1011001
Z1011010

Si miras bien de cerca, verás que ningún código se repite. Esto es algo hecho a propósito para evitar ambigüedades y es común a todas las codificaciones de caracteres.

De este modo, si interceptáramos una línea de código de computadora que lleva la forma "1001000101010010011011001100" y sabemos que la codificación de caracteres utilizada para producirla es ASCII, podríamos traducirla al alfabeto occidental. Para hacerlo, primero necesitamos separar la línea en grupos de 7 números cada uno (debido a que ASCII es una codificación de 7 bits), lo que resultaría en "1001000 1010100 1001101 1001100". Ahora cada uno de estos trozos es un carácter, que podemos decodificar buscando su equivalencia en la tabla de ASCII. Si buscas las coincidencias en la tabla de arriba verás que la palabra codificada es "HTML".

Las codificaciones de caracteres son ampliamente utilizadas (aún cuando no nos damos cuenta de ello) en sistemas operativos, documentos de texto, documentos HTML, documentos de e-mail, etc. Toda pieza de texto debe tener una codificación de caracteres ya que, al final, toda la información digital no es otra cosa más que una secuencia de bits.

Este es el motivo por el cual las codificaciones de caracteres le importan a HTML. Como un documento HTML es una pieza de texto que debe ser leída e interpretada (por navegadores y personas), debe tener una codificación de caracteres.

Una de las formas disponibles para especificar la codificación de caracteres utilizada por un documento es mediante el elemento meta y su atributo charset, el cual debe ser declarado en la sección de encabezado del documento (head). En el siguiente ejemplo, hacemos una declaración en la que establecemos que la codificación utilizada por el documento es ASCII (con su denominación preferida US-ASCII).

<meta charset="US-ASCII">

Otras codificaciones de caracteres muy populares y útiles son ISO-8859-1 (usualmente denominada "Latin 1") y UTF-8.

La unificación de UTF-8

Las codificaciones de caracteres nacieron con las computadoras como un mecanismo para traducir su código binario a texto legible para seres humanos. Muy pronto, los fabricantes de computadoras comenzaron a hacer sus propios juegos de caracteres de acuerdo a las necesidades de sus mercados (lenguaje y uso), lo que ocasionó un crecimiento masivo del número de codificaciones de caracteres disponibles.

El estándar Unicode se propone reemplazar y unificar las codificaciones de caracteres existentes para reducir su número y mejorar la efectividad (al resover los problemas de otros conjuntos de caracteres). Éste estándar codifica caracteres mediante diferentes esquemas denominados "Formatos de Transformación Unicode" (UTF).

UTF-8 es una codificación de caracteres de 8 bits de longitud variable para Unicode, que se está volviendo muy popular en Internet debido a su capacidad de representar todo carácter universal sin dejar de ser compatible con ASCII. UTF-8 utiliza de 1 a 4 bytes para codificar un solo carácter (de 8 a 32 bits) dependiendo del símbolo Unicode.

Un documento HTML que utilice la codificación de caracteres UTF-8 debería contener la siguiente declaración en su sección de encabezado (head):

<meta charset="UTF-8">

Servir documentos con la codificación UTF-8 permite a los autores insertar cualquier carácter sin tener que recurrir a las referencias de caracteres (con la excepción de los símbolos de marcado propios de HTML). Pero ten en cuenta que la creación y edición de documentos en UTF-8 debe ser llevada a cabo con un editor de texto que soporte esta codificación y éste debe estar correctamente configurado para utilizarla en el documento que se esté editando. De lo contratio, se producirá una malinterpretación de los caracteres.