Velneo V7: plataforma de desarrollo de aplicaciones empresariales

Codificación de caracteres

Publicado: 03.05.07 (00:00 UTC)

Introducción e historia

Desde el inicio de la informática uno de las principales necesidades es poder almacenar caracteres del lenguaje de una forma que los ordenadores puedan entenderlo.

Por ello surgieron varias normas internacionales para poder representar dichos caracteres y formar palabras.

Uno de los primeros fue ASCII (American Standard Code for Information Interchange), esta norma de codificación tiene 8 bits. De estos 8 bits inicialmente se utilizaban 7 para representar 128 caracteres diferentes ( letras, números, signos, espacio, tabulación y otros caracteres de control ) y el bit restante era para control de errores.

Más tarde por necesidades de introducir nuevos caracteres (acentos, símbolos locales, etc.) nació el ASCII Extendido, que seguían siendo 8 Bits pero se utilizaba el carácter de control de errores para dar la posibilidad de llegar a una lista de 256 caracteres.

La feliz idea fue elaborar un ASCII extendido por cada grupo de idiomas, con lo que la misma representación de ASCII era un símbolo en una codificación y otro símbolo en otra codificación.

Esto es el verdadero problema de ver correos o programas con símbolos raros. Cuando se trabajan con distintas codificaciones de ASCII extendido cada ordenador interpreta los datos de una forma particular.

Para solucionar todo esto y poner al mundo en acuerdo surgió UNICODE.

El estándar Unicode pone orden a la organización de todos los caracteres de todos los idiomas y le da un código a cada carácter de cualquier idioma, con lo que siguiendo el estándar unicode ya no podrá existir el problema que una misma información tuviera dos caracteres distintos.

Los primeros 256 caracteres de la tabla Unicode coinciden con la codificación de ASCII extendido comúnmente llamada Latin1. Esto hace compatible Unicode con Latin1.

Actualmente Unicode gestiona tal número de caracteres que para representarla de forma inequívoca necesitaríamos 32 bits ( 4 Bytes ), esto significaría que por cada letra estaríamos invirtiendo el tamaño de 4 caracteres ASCII extendido.

Para ello existen varias codificaciones según las necesidades, algunas de ancho fijo y otras de ancho variable ( Si el carácter no esta en rango bajo de Unicode añade otro byte para representarlo )

UTF-8 ( Inicialmente utiliza un byte y según el carácter que represente utilizara más bytes)

UTF-16 ( Inicialmente utiliza 2 bytes, 65.536 caracteres)

UTF-32 ( Utiliza siempre 4 bytes )

Uno de los que más llama la atención últimamente es UTF-8 ya que utiliza para el idioma ingles permanentemente solo un byte. En español y otros idiomas latinos utiliza muy a menudo dos bytes para algunos caracteres ( á, é, ñ , etc. )

Bases de datos y rendimiento

Uno de los temas más importantes en las bases de datos es el manejo de información y su indexado.

Generalmente existen dos valores a tener muy en cuenta.

- Tamaño de la información

- Velocidad de procesado

Si manejamos una codificación UTF-8 conseguimos un tamaño muy pequeño para la información que queramos representar, pero en contraposición, al tener un ancho variable, el coste de procesado es enorme ya que la longitud de una cadena no se puede conocer sin haber recorrido dicha cadena.

Por el contrario, si usamos UTF-32 tenemos un ancho fijo, con lo que el rendimiento es bueno, ya que conocemos el ancho de un texto simplemente conociendo el tamaño completo de la cadena. Pero el tamaño de la información es muy grande con lo que el rendimiento cae en picado.

Por un lado queda claro que no podemos permitirnos usar caracteres de tamaño variable ya que el coste de procesado, indexado y manejo es enorme y provocaría una caída del rendimiento importante.

Dado que queremos representar la mayoría de los idiomas disponibles en el mundo lo más adecuado es usar de 2 bytes por carácter ( un juego de 65.536 caracteres ), esto nos permite que la base de datos maneje la mayoría idiomas conocidos con un coste de tamaño controlado.

Con esta filosofía nace en Velneo el Campo Alfa UTF-16

De esta forma cuando nuestra aplicación necesite manejar caracteres fuera del juego de caracteres Latin1 lo más adecuado es usar el nuevo tipo de campo Alfa UTF-16.

Siempre un pasito más

Ya en versiones anteriores de Velneo, existían unos campos Alfabéticos un poco especiales, el Alfa 40, Alfa 64, Alfa 128 y Alfa 256 que no dejan de ser el rendimiento en estado puro. Son juegos de caracteres reducidos que permiten almacenar la misma información en menos espacio.

Alfa 256 – 8 bits por carácter

Alfa 128 – 7 bits por carácter

Alfa 64 – 6 bits por carácter

Alfa 40 – Menos de 6 bits por carácter

Estos juegos de caracteres propios, permiten que el desarrollador adapte sus necesidades de una forma que el rendimiento de las aplicaciones suba de una forma exponencial.

Enlaces

http://unicode.org/notes/tn12/tn12-1.html

http://es.wikipedia.org/wiki/Unicode

http://www.juque.cl/weblog/2006/01/25/ascii-unicode-utf8-y-la-iatarnaaianalizaaian-parte-i.html

 

Etiquetas: alfa, , , , ,

Arriba

Comentarios

  • Publicado: 04.05.07 (09:25 UTC)
    Por comercial #

    Interesante artículo

    Nacho

  • Publicado: 04.05.07 (11:50 UTC)
    Por fjpnovo #

    Entendido.

    Un saludo,

    Fran.

  • Publicado: 04.05.07 (17:34 UTC)
    Por eic #

    Buen artículo.

    Saludos,

    Fran Varona

  • Publicado: 08.05.07 (21:04 UTC)
    Por jj #

    Esclarecedor.

    Saludos.

    Jesús Jiménez

Deja un comentario

http://velneo.esDebes estar registrado para comentar.

© 2014, Velneo S.A. Todos los derechos reservados      Empresa | Contacto | Aviso legal
Life is soft - Evento de software de gestion