Sobre ceros y unos

Los dispositivos electrónicos modernos almacenan y transfieren sus datos como una gran colección de ceros, «0», y unos, «1». Dependiendo de la arquitectura del dispositivo, estos son interpretados de diferentes formas. En la base de estas interpretaciones están el código y el sistema binarios. El sistema binario es un sistema numérico posicional de dos dígitos: 0, 1, 10, 11, 100, 101, 110, etc. Sin entrar en los detalles del valor numérico que les corresponde, notar que con 2 dígitos binarios se pueden formar 4 secuencias: 00, 01, 10 y 11, numeradas de 0 a 3. En general, con n dígitos binarios se pueden formar 2n secuencias: 00..00, 00..01, ..., 11..10 y 11..11, numeradas de 0 a 2n-1. El código binario utiliza el sistema binario para codificar datos e instrucciones dados usualmente en bloques de 8 bits (dígitos binarios) llamados bytes (unidad direccionable más pequeña). Según lo anterior, con 1 byte se puede codificar 28=256 elementos diferentes.

Codificación de caracteres

La codificación de caracteres es el proceso por el cual se identifica un carácter dado como un símbolo en un sistema de representación (p. ej. la letra «a») con una entidad de otro sistema de representación (p. ej. la secuencia «(0)1100001»). Existen diferentes estándares que permiten codificar las letras latinas (a-z) y los números arábigos (0-9) a otros sistemas, de los más simples y fácilmente reconocible es el código morse. En el campo de la informática, son notables los códigos ASCII y UTF-8.

ASCII y Extended ASCII

El código ASCII (American Standard Code for Information Interchange —Código Estándar estadounidense para el Intercambio de Información—) es un estándar de codificación de caracteres de 7-bits, por lo que permite codificar 128 caracteres diferentes numerados del 0 al 127. En la tabla ASCII se recoge la relación entre la numeración y el carácter que representa y en la que destacan dos grupos. Por una parte, los caracteres imprimibles con códigos del 32 al 126 entre los que se encuentran el alfabeto latino (minúsculas, a-z, y mayúsculas, A-Z), los números arábigos (0-9) y, esparcidos entre estos, signos de puntuación y similares (!"#$+-<>=). Por otra parte, los caracteres no imprimibles o códigos de control que servían en la época para codificar instrucciones relativas a la propia transmisión o impresión de los datos: finalizar transmisión (4), confirmar (6), campana (7), avance de línea (line feed, 12), retorno de carro (carriage return, 15).

Tabla ASCII

Aunque inicialmente se completaba el septeto de bits del código ASCII con un octavo bit de paridad o redundancia, similar a la letra del DNI/NIF, este quedó pronto obsoleto debido a las mejoras tecnológicas. Puesto que el código ASCII no podía recoger caracteres de uso común en las lenguas occidentales, se optó por utilizar este octavo bit para ampliar el código. Extended ASCII no es un estándar en sí sino un conjunto de estándares que tienen al código ASCII como subconjunto, en cierto modo, retrocompatibles.

Cabe destacar que la definición del código ASCII figura como uno de los hitos de la ingeniería electrónica según la IEEE. Y no es para menos pues actualmente la casi totalidad de los dispositivos utiliza dicha codificación o una extensión.

ISO/IEC 8859

El estándar ISO/IEC 8859 es en realidad un conjunto de dieciséis (uno de ellos inacabado) estándares de codificación de caracteres de 8 bits que extienden ASCII. Aunque su longitud permite codificar 28=256 caracteres, siendo los 128 primeros los dados en ASCII, sólo definen los caracteres del 160 al 255. El primero de ellos, ISO-8859-1 (Latin-1 Western European), y su revisión, ISO-8859-15 (Latin-9), son los que corresponden al español entre otras lenguas de Europa del oeste como francés o catalán.

Pese a los esfuerzos por extender ASCII de forma estandarizada, ISO/IEC 8859 tiene un par de inconvenientes inconvenientes. En primer lugar, aunque puede cambiarse la codificación, un documento (archivo de texto plano) no puede combinar estándares y un abanico de 256 caracteres es una cantidad limitante. Además, aunque existen técnicas para detectar la codificación de un determinado archivo, estas no siempre funcionan, pudiendo producir resultados no deseados.

UTF-8

Unicode (Universal Coded Character Set —conjunto universal de caracteres codificados—) es un un estándar para la codificación, representación y manejo consistente de textos expresados en los sistemas de escritura del mundo moderno. Incluye todos los caracteres de uso común provenientes de alfabetos, sistemas ideográficos y colecciones de símbolos (matemáticos, técnicos, musicales, iconos...) con el fin de trascender los conflictos inherentes a ISO/IEC 8859. La versión 14.0 contiene 144.697 caracteres.

La codificación UTF-8 (8-bit Unicode Transformation Format —Formato de Transformación Unicode de 8 bits—) es una implementación de Unicode. Concretamente es un estándar de codificación de caracteres de longitud variable de 1 a 4 bytes (8, 16, 24 o 32 bits), pudiendo codificar un 21164.864, un número muy superior al cubierto por la totalidad de los estándares ISO/IEC 8859 y que, por ahora, incluye todos los caracteres definidos por Unicode. Otras dos implementaciones de Unicode son UTF-16, de longitud variable de 2 o 4 bytes (16 o 32 bits) y UTF-32, de longitud fija de 4 bytes (32 bits). La mayor ventaja de UTF-8 frente a UTF-16 y UTF-32 es que los textos codificados con él ocupan menos (hasta 4 veces menos), la mayor desventaja es el coste computacional que supone la variabilidad de longitud de los caracteres. Aún así, es el estándar de codificación con mayor implantación, más de un 95% de la web.

Archivos de texto plano

Los archivos de texto se dividen en dos grupos, los archivos de texto formateado y los de texto plano «con intersección no vacía». Ejemplos comunes de archivos de texto formateado son los archivos PDF (portable document format) o los creados con editores WYSIWYG (what you see is what you get) como Libre Office (.odt) en los que el texto del documento puede tener diferentes características (fuente, tamaño, peso, forma, color). Este tipo de archivos no almacenan el texto del documento de forma directa, siendo ilegible si no se visualizan con el software correspondiente. En contrapartida, los archivos de texto plano almacenan el texto de forma aséptica, sin ningún tipo de característica visual, la cual viene dada por el software de edición. Extensiones comunes asociadas a este tipo de archivos son .txt (texto general), .c (archivo fuente en lenguaje C), .html (página web). Estos últimos, los archivos .html, son técnicamente archivos de texto plano pero que almacenan el texto acompañado de instrucciones (etiquetas o marcas) de formato para que otro software pueda representar el texto acorde a dichas instrucciones. Es decir, son archivos de texto plano que implementan un determinado lenguaje de marcado, en este caso HTML (Hyper Text Markup Language).

Ejemplo de párrafo en HTML

A su vez, los archivos de texto plano se subdividen en dos grupos: formato Unix y formato Windows (denominado históricamente formato DOS). Se diferencian en un único aspecto, en cómo indican el final de línea. Aunque invisible, el final de línea es codificado en los archivos tipo Unix con el carácter de «avance de línea» (line feed) del código ASCII, mientras que los archivos tipo Windows lo hacen con el mismo avance de línea (line feed) y además el «retorno de carro» (carriage return). Cuando un archivo Unix es abierto (mostrado) como un archivo Windows, visualmente se observa una única línea y, cuando un archivo Windows es abierto como un archivo Unix, se muestra la secuencia la secuencia ^M (correspondiente al retorno de carro) al final de cada línea.

Es recomendable utilizar archivos de texto plano codificados en UTF-8 y en formato Unix por compatibilidad y espacio.

Next Post