jueves, 20 de agosto de 2009

Unicode vs. ANSI; ¿qué debo instalar?

Al instalar las versiones de Meta4 (desde la v7.1 Sp1) se te pregunta que tipo de codificación se usará. Siempre he tenido dudas así que he buceado un poco por Internet y he encontrado un montón de referencias que me han ayudado. Os expongo mis conclusiones, si alguien sabe algo más, pues que me lo diga. Aunque siempre se puede consultar el archivo que Meta4 incluye en los CD de Tecnología “Configuración_Unicode.pdf”.

Lamentablemente, hasta la versión 7.1sp1 PeopleNet no ofrece soporte a Unicode.

[Según el archivo “Configuración_Unicode.pdf”]

Por regla general, siempre que se necesite que una instalación de PeopleNet sea capaz de gestionar cadenas de caracteres pertenecientes a más de una página de códigos será necesario el uso del soporte Unicode de PeopleNet.

Así, por ejemplo, si se tiene un escenario donde sólo se gestiona un idioma: inglés, español, francés, alemán, griego, hebreo, chino, etc. No será necesario utilizar el soporte a Unicode de PeopleNet. Bastará con que se seleccione la página de códigos adecuada en cada capa de la aplicación: cliente, servidor, base de datos, etc. Mientras la página de códigos sea la misma en todas ellas los datos serán tratados correctamente y no se perderá información.

Tampoco será necesario hacer uso del soporte Unicode de PeopleNet si se utilizan varios idiomas, pero todos ellos pueden ser representados por una sola página de códigos. Este sería el caso de utilizar inglés y español, alemán y francés, etc. Ya que se puede utilizar la página de códigos ISO-8859-1 para representar todos ellos. Siempre se puede utilizar una página de códigos para representar inglés y cualquier otro idioma.

Existe una excepción a las reglas anteriores, ya que a día de hoy PeopleNet presenta limitaciones en el tratamiento de idiomas que no sean representables con el conjunto de caracteres de Europa occidental (ISO-8859-1). Así, por ejemplo, la ordenación o paso a mayúsculas y minúsculas en la página de códigos hebrea o china no se producirá correctamente si se realizan a través de ln4 (lenguaje de programación de PeopleNet).

Así pues, si se tiene un escenario en el que distintos usuarios de PeopleNet pretenden manipular ciertas cadenas de texto en distintas páginas de códigos, por ejemplo español y chino, será necesario configurar la aplicación para hacer uso del soporte Unicode de PeopleNet.

¿Cuál es la diferencia, a nivel bajo, entre Unicode y ANSI?

En pocas palabras, la versión de un programa de Unicode se ejecuta levemente más rápido que la de un ANSI, pero sólo se ejecuta en Windows NT.

¿Qué es ANSI y Unicode?

ANSI

ANSI vino primero. ANSI (http://www.ansi.org/) es una organización que normaliza diversas áreas y ámbitos, tanto públicos como privados. Es un acrónimo para American National Standards Institute o Instituto Nacional de Estándares Americano. ANSI ha normalizado muchos áreas y ámbitos de la informática. Una de las normas en los equipos fue el conjunto de caracteres (letras, números y símbolos) que utiliza un ordenador. Esta norma fue llamado ASCII (American Standard Code for Information Interchange o Código Estándar Americano para el Intercambio de Información). Esta norma proveía 256 símbolos diferentes que puede utilizar un ordenador. Es rápido, eficiente y fácil de implementar. Todos los sistemas operativos modernos comprenden completamente ASCII.

Unicode

Uno de los principales problemas de usar ASCII es que sólo se pueden tener 256 caracteres diferentes. Sin embargo, hay idiomas, como el japonés o el árabe, que disponen de miles de caracteres, así que ASCII no puede funcionar en estas situaciones. El resultado, para evitar estos problemas, fue Unicode que permite hasta 65.536 caracteres diferentes. Como Unicode es más complejo que ASCII, no se puede aplicar en muchos sistemas operativos. La familia de Microsoft; Windows NT, Windows 2000, Windows XP y Windows 2003, admiten Unicode así como todas las futuras versiones de Windows.

Así que la cuestión pasa a ser ahora, si Windows NT es compatible tanto con ASCII y Unicode, ¿por qué los programas en Unicode se ejecutan con mayor rapidez? Para responder a esta pregunta hay que entender la propia estructura de Windows NT. El kernel de Windows NT está escrito en Unicode, y por lo tanto, sólo entiende de Unicode. Cuando un programa ANSI se ejecuta en Windows NT, el sistema operativo debe convertir las cadenas de ASCII a Unicode. Esto consume un tiempo en la conversión y, además, hace necesario que la memoria almacene los dos ejemplares (ASCII y Unicode). Considerando que un programa Unicode "ataca" directamente al núcleo es más rápido. En los ordenadores modernos que funcionan a velocidades de giga hercios y con cientos de megas de RAM esta diferencia de velocidad es mínima, pero sí existe.

La última área a analizar es, ¿por qué sólo programas Unicode se ejecutan en Windows NT y no en otros sistemas operativos como Windows 95/98/ME? La respuesta se remonta, de nuevo, al Kernel de estos sistemas operativos. Windows 95/98/ME están diseñados para ser un sistema operativo "ligero" y sencillo para el usuario general y su kernel está escrito en ASCII. Microsoft podría haber puesto en práctica un sistema de conversión similar al de Windows NT, pero esto consumiría una gran cantidad de recursos tanto de memoria como de disco duro. Windows 95/98/ME pueden funcionar en un sistema de gama baja, con tan solo 4 megas de RAM, mientras que Windows NT requiere un mínimo de 16 megas de RAM. En la mayoría de los ordenadores que tienen 64 megas de memoria RAM o más, esto no es tan importante. Esta es una de las razones principales por la cual el código de Windows 95/98/ME está cerrado.

Resumen "muy resumido"
  • Si sólo se ejecuta en equipos con Windows NT/2000/XP podrás usar las versiones de Unicode, pero las versiones ANSI tambien funcionan.
  • Si sólo se ejecuta en equipos con Windows 95/98/ME sólo podrás usar la versión ANSI.
  • Si se ejecuta en equipos con Windows 95/98/ME y en equipos con Windows NT/2000/XP, deberás usar la versión ANSI.

3 comentarios:

Anónimo dijo...

Buenas Oscar, me gustaría contar contigo en la comunidad de Meta4 llamada Meta4 Comunity.muchas gracias y nos vemos por allí. un saludo

Oscar López dijo...

Amigo/a "Anónimo"...

Estaré encantado de estar en cualquier comunidad de Meta4 si me dices donde puedo inscribirme :-)

Un saludo,
Oscar L.

Fede dijo...
Este comentario ha sido eliminado por el autor.