| Lista Articulos: [0-C] [C-I] [I-P] [P-Z] | Todas las categorías | Página aleatoria | Lo que enlaza aquí | ||||||
La codificación de caracteres es el código que empareja cada carácter de un lenguaje natural (pertenezca éste a un alfabeto o un silabario) con un símbolo en otro sistema de representación, como un número o una secuencia de pulsos eléctricos en un sistema electrónico. Ejemplos comunes son el código Morse, la norma ASCII o la UTF-8.
El aspecto visual de este texto, sus distintos tipos y colores, no está almacenado completamente en el archivo que lee el computador para presentar esta página. Ese archivo, llamado "archivo fuente", es un texto visualmente muy pobre, que contiene las palabras que se ven, más otras que no se ven en este momento, pero que son instrucciones al computador, instrucciones que describen cómo presentar la información de modo que su aspecto se asemeje lo más posible a lo que el autor tenía en mente. En la fuente, las instrucciones están escritas en un lenguaje de marcado (en este caso, HTML), y cada carácter (cada símbolo individual) está representado por un número. Uno de los primeros problemas que el visualizador de este archivo (el navegador web, concretamente) tiene que resolver es: dónde comienza y termina cada número.
La unidad más pequeña de información que un computador puede procesar es el dígito binario, o bit. En los años 1960, cundió la costumbre de agrupar tales bits en octetos (secuencias de ocho), que en inglés se denominó octet pero que terminó siendo sustituido por su casi-sinónimo byte. La transmisión de datos de un computador a otro pasó a ser vista como la transmisión de una secuencia de octetos, cada uno de los cuales correspondería a un número, cada número correspondiente a un símbolo:
Llamamos codificación de caracteres (character encoding) al procedimiento que asocia un símbolo a cada número (dado un número, "entrega" o "activa" un símbolo), entendiéndose que los números —que en este contexto se llaman "códigos"— deben ser enteros, no negativos, dentro de un conjunto finito (p.ej. {0 a 127}, o {0 a 255}). Diferentes fabricantes de maquinaria usaban distintas codificaciones, hasta que en 1968 se llegó a una norma que hasta el día de hoy se usa y se conoce como "ASCII" (American Standard Code for Information Interchange).
El problema es que el ASCII, por estar íntimamente ligado al octeto, y a los enteros que van del 0 al 127, no puede codificar más que 128 símbolos diferentes. 128 es el número total de diferentes configuraciones que se pueden conseguir con 7 dígitos binarios (0000000, 0000001, ..., 1111111), y el octavo dígito de cada octeto ("dígito de paridad") se usaba para detectar algún error de transmisión. Un cupo de 128 es suficiente para incluir mayúsculas y minúsculas del abecedario inglés, además de cifras, puntuación, y algunos "caracteres de control" (por ejemplo, uno que instruye a una impresora que pase a la hoja siguiente), pero el ASCII no incluye ni los caracteres acentuados ni el comienzo de interrogación que se usa en castellano, ni tantos otros símbolos (matemáticos, letras griegas, ...) que son necesarios en muchos contextos. Por esta razón se vio que era insuficiente y se definieron varios códigos de caracteres de 8 bits.
Sin embargo, el problema de estos códigos de 8 bits es que cada uno de ellos se define para un conjunto de lenguas con escrituras semejantes y por tanto no dan una solución unificada a la codificación de todas las lenguas del mundo. Es decir, no son suficientes 8 bits para codificar todos los alfabetos y escrituras del mundo.
La solución que se ha venido en adoptar, internacionalmente, es separar la norma de codificación (elección de símbolos, y asignación de un código fijo a cada símbolo) de la norma de transmisión, usándose ambas en conjunto. La norma de codificación más universal en la actualidad, y desde 1991, se llama Unicode: es una gran tabla, que en la actualidad asigna un código a cada uno de los más de cincuenta mil símbolos, los cuales abarcan todos los alfabetos europeos, ideogramas chinos, japoneses, coreanos, muchas otras formas de escritura, y más de un millar de símbolos especiales. Normas de transmisión de Unicode hay varias, pero la más relevante en Internet es UTF-8.
Los mensajes de Internet se transmiten en paquetes que siempre constan de un número entero de octetos, y la detección de error ya no se hace con el octavo dígito de cada octeto, sino con octetos especiales que automáticamente se agregan a cada paquete. Aquello forma parte de los protocolos de transmisión de datos, que constituyen toda una jerarquía de normas; UTF-8 se limita a especificar una correspondencia, reversible, entre códigos (que representan caracteres), y secuencias de octetos (que han de ser transmitidos en calidad de datos).
Entonces, aquí está la razón de utilizar Unicode (norma de codificación) con UTF-8 (norma de transmisión): en primer lugar, Unicode asigna los enteros del 0 al 127 (un total de 128) a exactamente los mismos caracteres que ASCII; en segundo lugar, UTF-8 empaqueta cualquier entero del 0 al 127 en un octeto "a la antigua" pero con el octavo dígito siempre en cero. (Recordemos que ese octavo dígito, en ASCII llamado "dígito de paridad," modernamente ya no se usa para detección de error, aunque sí se usa como parte de la codificación en ISO 8859.) Pero como la tabla de Unicode es tan grande, la mayoría de sus símbolos están asignados a enteros mayores que 127 (códigos que, en consecuencia, necesitan más que 7 dígitos para su representación binaria). En todos esos casos, UTF-8 envía, en un primer octeto con dígito de paridad = 1, el comienzo de la representación binaria del código en cuestión, y la máquina que recibe, al ver ese "1", no lo interpreta como indicación o no de error o como parte del caracter, sino como indicación de que, lo que está siendo transmitido es un código que no cabe en 7 dígitos binarios; y por tanto interpreta que el símbolo correspondiente no lo va a conocer mientras no lea el siguiente octeto, y tal vez el que sigue. En el peor de los casos, quizás se haga necesario leer seis octetos consecutivos para determinar un código alto.
Pero, para cartearse electrónicamente en mandarín (por ejemplo) falta un detalle importante:
La tabla que el Consorcio Unicode publica para ser leída por humanos, contiene una representación gráfica y/o descripción, de cada caracter incluido hasta ese momento; pero, los sistemas de visualización de documentos, para poder funcionar, requieren tablas de tipografía, que asocian un glifo (un dibujo) a cada caracter que abarcan, y sucede que hay muchísimas tablas de tipografía, con nombres como Arial o Times, que dibujan una misma letra a base de matrices diferentes y en diferentes estilos ("A" o "A"); sin embargo, la gran mayoría de las fuentes tipográficas abarcan sólo un pequeño subconjunto de todos los caracteres Unicode. Por eso, para leer páginas con símbolos asiáticos, por ejemplo, no basta que el visualizador usado "acepte" la codificación Unicode, sino que, además, debe el computador debe tener instalada una tabla tipográfica suficientemente extensa.


