Unicode

De WiChiron
Saltar a: navegación, buscar

La wikipedia define Unicode como un estándar internacional para la creación de textos en cualquier idioma.

Tradicionalmente para la composición de textos, debíamos atenernos al idioma predefinido: el idioma que estaba instalado en el sistema operativo. Para hacer textos donde se utilizaran diferentes idiomas, que tuvieran además diferentes grafemas, como es el latín y el griego, se utilizaban diferentes métodos de codificación o programas.

El problema venía que los ordenadores utilizaban para la transmisión y almacenaje de información el código ASCII, inspirado en el alfabeto latino y que contenía 127 caracteres. Por tanto a cada letra se le asignaba 1 byte para identificarla y poder utilizarla (a este proceso se denomina codificación)  Para recoger letras acentuadas o alfabetos especiales, como el ruso o el japones, se desarrollaron diferentes mapas de caracteres donde se necesitaban hasta dos bytes de información para recoger cada una de las diferentes grafías. Estos mapas de caracteres se basaban en la combinación de valores ASCII, que después se trasladaban a un mapa donde se reconocía el grafema del idioma correspondiente.

 ! " # $ % & ' ( ) * +, -. / 0 1 2 3 4 5 6 7 8 9 :; < = > ?

@ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _
` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~


Esto produce la aparición de mapas característicos para cada lengua, de tal manera que se adaptaban a las particularidades gráficas de cada una de las lenguas de los usuarios.

Pero esta adaptación de las máquinas a los idiomas nacionales, presentaba y presenta los siguientes problemas:

1. A nivel interno el ordenador seguía trabajando con codigos alfanuméricos basados en ASCII, así por ejemplo en el sistema de archivos MSdos (mecanismo para la creación y organización de los archivos en un soporte), los nombres de los archivos no podían llevar acentos, Esto se solucionó provisionalmente con el sistema FAT, y los más actuales NTSC y EXT3, pero el problema sigue allí.

2. La adaptación de los idiomas nacionales a las máquinas fue complicada, y se llevó a cabo en dos aspectos:

 - la adaptación del interface de entrada o teclado a las grafías nacionales, siempre manteniendo las 105 teclas del estándar americano.

 - la creación de diferentes formatos gráficos para la representación de las grafías tanto en la pantalla del ordenador como en una impresora.

Evidentemente las medidas adoptadas en cada idioma fueron propias, y no hubo un convenio general.

3. La imposibilidad de combinar en una misma máquina, sin software tercerizado, de dos o más idiomas, especialmente cuando las grafías y la disposición del texto (ejemplo las lenguas orientales y semíticas) era diferentes al modelo latino.


Muchos procesadores de texto, aprovecharon la creación de diferentes mapas de caracteres para crear una serie de aplicaciones que permitían combinarlos. Aunque las posibilidades combinatorias entres varios lenguajes en un mismo documento son limitadas. Se puede combinar por ejemplo el ingés y el japonés, porque al no utilizar el inglés letras acentuadas, acapara los valores ASCII hasta el 0x80. Pero la utilización de un lengua acentuada europea con el japonés es prácticamente imposible.

La única solución es que hubiera un mapa de caractéres que recogiera todas las grafías de las diferentes lenguas del mundo. Esto existe y es el denominado “Unicode”. En Unicode, cada carácter se le asigna un “numero” de acuerdo a unas coordenadas hexadecimales entre 1- 10FFF (lo que proporciona más de un millón de caracteres posibles). Esta tabla se divide en 17 “planos” de 65.000 caracteres cada uno. El primer plano (que corresponde del 1 al FFFF hex) se denomina el Mapa Básico Multilengua (Basic Multilingual Plane, BMP) y contiene la mayoría de los caracteres más frecuentes.


Preparar un ordenador para que pueda escribir en cualquier lengua se denomina en inglés “multilingualisation”, que nació con el proyecto M17N. El interés general por M17N es bastante limitado. La mayoría de las personas utilizan el idioma preconfigurado de su ordenador, que suele ser el materno.


No obstante un ordenador multidiomático abre nuevas posibilidades al usuario. Una vez preparado el ordenador, uno puede utilizar diferentes lenguajes y sus alfabetos, independientemente del idioma local del sistema operativo. Por tanto, Unicode es definitivamente pertenece al futuro próximo.


Basicamente en Unicade, los números comprendidos desde 1-255 (1-FF hex.) se reservan para los caracteres básicos latinos (Latin-I), ocupando el código ASCII desde el 1 al 7F. Tras este primer grupo de caracteres, se recogen el grupo de caracteres que recogen los principales letras acentuadas para los diferentes usos del alfabeto latino, los caracteres del ruso, griego, árabe y japonés (Higarana y Katakana. Un ejemplo:

41
hex =
A

E9
hex =
é
"e" con acento agudo
14D
hex =
ō "o" larga o con macron
3A3 hex =
Σ
sigma capital
306F hex =
hiragana HA
5229 hex =

kanji RI
B300
hex =
Sílaba corena DAE
92C+93F hex =
बि Devanāgarī BI



El Estandar Unicode lo que hace es asignar un número a cada grafía, no a la forma o al tipo de letra con los que son representados (por tanto subrayado, negrita u otros atributos de los caracteres no están recogidos propiamente en las correspondencias Unidode). Es mapa de caracteres Unidoce solo recoge el texto puro. Se encarga por tanto de definir como si fueran una tabla, donde en una columna hay una serie de números (en sistema decimal o hexadecimal) y en la otra columna la letra que le corresponde, (incluyendo sus posibles convinaciones acentuales o suprasegmentales, así como otro tipo de símobolos o grafías especiales).


Desde un punto de vista teórico, Unicode lo que se encarga es de “establecer los códigos de los caracteres o grafemas utilizados.”, o sea establecer las correspondencias binarias que permitirarn la transmisión o almacenace de un texto en un soporte digital, o sea transformar nuestro sistema natural de escritura en 0 y 1, comprensibles para una máquina.


Existen dos métodos de codificación de caracteres: el UCS-2 y el UTF-8. Estas son las normas que establecen las correspondencias entre los datos (byte) y los caracteres escritos. Son las que permiten a la máquina interpretar las correspondencias numéricas con los diferentes caracteres. Son las aplicaciones que traducen el código máquina de 0 y 1 (binario) a representaciones legibles para el usuario.

Así cuando nosotros guardamos un documento en el Openoffice, este se guarda codificado con caracteres Unicode codificado según UCS-2.

Basicamente lo que hace UCS-2 es darle a cada carácter o letra del documento dos bytes de tamaño, en esos dos bites se guardará el número correspondiente de la tabla Unicode que recoja el caractér que hemos excrito (por tanto un número comprendido entre 1 – FFFF). Cada carácter es guardado de la siguiente manera:

-  Para caracteres 100 hex y mayores: se selecciona el byte más importante (el que corresponde al número del caractere, en primer lugar, y después el otro byte.
-  Para el grupo Latín -1: primero un cero, y después el valor del carácter.


¿por qué es tan importante la asignación de byte por caracter? basicamente para que el tamaño de los archivos no se muy grande y puedan manejarse con rapidez. Tanto UCS-2 como UTF-8 son normas "variables", o sea asignan byte menores a las grafías más comunes en el mundo anglosajón.


Una variante de UCS-2, denominada UTF-16, permite la codificación del conjunto total de los caracteres Unicode.

Hay que destacar que existen una serie de inconvenientes a la hora de utilizar el UCS-2, sobre todo cuando un texto está construido principalmente con caracteres ASCII. Esto se debe a que cada caractere ASCII está acompañado por un cero en su byte. Esto provoca que se aumente el tamaño del archivo. Y otro inconveniente es que la búsqueda de cadenas de caracteres ASCII directamente sobre un texto codificado en UCS-2 es imposible. Además en el entorno de programación C, un byte con valor cero marca el final de una cadena. Así que las cadenas UCS-2 tienden a ser más cortas en una librería C. Por supuesto que hay formas de solucionar estos pequeños problemas, Microsoft utiliza UCS-2 para la representación interna de sus caracteres en su entorno, y la mayoría de los programas Linux lo hacen igual.


El UTF-8 es otro de los sistemas más comunes. Openoffice permite también guardar los documentos bajo este sistema. UTF-8, por ejemplo, almacena los caracteres ASCII (desde el 1 al 80 hex), con sus correspondencia tradicional. Por otro lado los caracteres Unicode con un rango más alto, son definidos en bytes de hasta 4. Un ejemplo, para el almacenaje de una letra acentuada como “á”, se necesitan en UTF-8 dos bytes, para una letra japonesa, 3 bytes.


La ventaja del UTF-8 es su utilización directos de los valores ASCII lo que le permite que un archivo antiguo codificado en ASCII pueda ser interpretado por cualquier programa que utilice UTF-8. Así como su compatibilidad con programas escritos en C.
Se acepta universalmente que UTF-8 es el mejor método de codificación de textos Unicode. Así en el entorno Web (Html), las secuencias UTF-8 son las más utilizadas en los encabezados de las páginas.



En Html, lenguaje más extendido dentro de la Web, se pueden colocar directamente caractéres unicode introduciendo su valor decimal o “decimal entities”, así si quisieramos escribir 東 sólo deberíamos poner en la página la secuencia &#26481;). Este número representa el número Unicode del carácter en su formato decimal. De esta forma se puede utilizar el Unicode directamente en páginas web, donde no se hay especificado Unicode en la composición de la página. Esto parece complejo, ¿por qué no utilizan para la composición de una página web el sistema Unicode? La respuesta es porque actualmente todos los navegadores no soportan los caracteres Unicode.


UTF-8 además para la codificación propiamente de documento u otros textos, parece ser el mejor sistema de codificación para almacenaje de archivos en Unix/Linux, el único problema es la necesidad de un montor de scrips y de archivos de configuración para su correcto funcionamiento.