15 de Agosto, 2004

ISO 8859-1 y UNICODE

He empleado un 'y' en lugar de un 'vs', como se podría esperar ya que son una disyunción, porque creo que eso sería un error. Sus objetivos son diferentes y, donde el empleo de uno de ellos es óptima, el uso de la otra codificación puede considerarse un desperdicio o ser insuficiente.

Ambas son codificaciones de caracteres, es decir, un código que crea pares de relación entre caracteres de representación de un lenguaje (como nuestro alfabeto) y otro sistema de representación distinto, en este caso la representación digital en una computadora.

La codificación ISO 8859-1 es una norma ISO (del inglés International Organization for Standardization, Organización Internacional para la Estandarización) que define la codificación para el alfabeto latino (también se le conoce como latin-1) necesario para la escritura de los siguientes lenguajes de Europa Occidental: afrikaans, vasco, catalán, danés, neerlandés, inglés, feroés, finés, francés, gallego, alemán, islandés, gaélico, italiano, noruego, portugués, escocés, español y sueco.

Sus características principales son que tiene compatibilidad con la codificación ASCII en sus primeros 128 caracteres y que solo requiere de 8 bits para codificar todo el alfabeto.

El estándar UNICODE aparece para solventar un problema que se desprende de la descripción de la codificación ISO 8859-1: ¿qué ocurre si empleamos un lenguaje que no comparte el alfabeto de los lenguajes citados? Necesitamos entonces otro estándar de codificación, que definirá los caracteres necesarios para ese lenguaje (o como en el caso del ISO 8859-1, para una zona geográfica).

Esto no supone ningún problema para la representación. Si nuestro navegador está correctamente configurado, probablemente muestre páginas a lo largo de un día de trabajo que emplean diferentes codificaciones sin que apreciemos ningún problema (esta bitácora emplea ISO 8859-1, mientras que las páginas enlazadas en la Wikipedia usan UNICODE en su variante UTF-8).

El problema puede aparecer en el momento que se realiza un intercambio de documentos, por ejemplo, que están codificados de origen en un juego de caracteres distinto del de destino. Esto viene pasando con los trackbacks que llegan a esta bitácora desde gestores de contenidos que emplean otra codificación diferente a la usada aquí.

La idea del UNICODE es definir un juego de codificaciones posibles (destacan UTF-8 y UTF-16, pero hay más) en las cuales cada carácter posible tiene un equivalente único, de forma que podamos emplear UNICODE para codificar cualquier lenguaje existente sin tener que cambiar de estándar.

Lamentablemente el UNICODE no solo tiene ventajas. Por ejemplo, en el caso de UTF-8 (una de las codificaciones más extendidas), la codificación es variable, siendo de 1 byte para los primeros 128 caracteres (en compatibilidad con ASCII) y hasta 4 bytes para el resto.

Unido a esta mayor necesidad de espacio tenemos que la representación es más compleja (por ejemplo PHP permite convertir un texto en portable empleando entidades HTML, pero solo si usamos ISO 8859-1), y hay distintas codificaciones posibles dentro del mismo UNICODE, que sin ser el caso obligatorio de elegir un ISO dependiendo del lenguaje, sí puede ser interesante cambiar de uno a otro (hay lenguajes que ocupan menos espacio si empleamos UTF-16 en lugar de UTF-8).

El problema del intercambio entre UNICODE y sus codificaciones y otras codificaciones estándar, como en este caso ISO 8859-1, es exactamente el mismo que planteábamos antes.

¿Cual es la solución? Especificar la codificación en origen para que se pueda realizar la conversión en destino. Esto a veces no se puede hacer, como es el caso de los trackbacks tal y como los especifica MT, o cuando intercambiamos un documento en formato de texto plano y el sistema de intercambio no informa de la codificación empleada en el origen. Hay muchos casos en los que esto es un problema, y hay soluciones específicas, como los documentos portables PDF, pero no existe una solución general.

Porque el uso de UTF-8 en todos los ámbitos no es la solución, en contra de lo que muchas veces se suele predicar.

En mis sistemas operativos suelo emplear ISO 8859-1 porque mi idioma principal es el castellano (aprovecho la compatibilidad ASCII para escribir en inglés, y cuando cae algo en catalán estoy cubierto con la norma ISO elegida), incluyendo el sistema de archivos, y aunque probablemente muchos de ellos permitan emplear UTF-8, no es en absoluto necesario emplearlo.

Otros sistemas puede que no permitan ese UTF-8 (Microsoft Windows implementa UTF-16 en su UNICODE e imagino que no UTF-8 si ya usa esa otra codificación, aunque también se usa Windows-1251, Windows-1252, Windows-1258; ¿estándar? :D), con lo que siempre tendremos el problema del intercambio.

¿En un mundo perfecto se usaría solo UNICODE? No lo sé. Para los que usamos un lenguaje cubierto por ISO 8859-1 en nuestras aplicaciones (esta bitácora, por ejemplo), en mi opinión, nos es totalmente innecesario.

Cuando vuelva de vacaciones y/o tenga tiempo, a ver si me pongo en cómo indicar en un trackback la codificación en el origen (y luego obtener esa información en el destino :P) sin salirnos de la especificación de MT.

Anotación por Juan J. Martínez.

Hay 5 comentarios

Gravatar

Hola...

Un post muy interesante :)

En realidad yo utilizo UTF-8 porque es el que empecé a utilizar cuando empecé mi bitácora y ahora si cambio se me destrozarían los posts anteriores... :-( :-(

A mí me parece mejor sistema el de los pingbacks (http://python.dns-nac-zone.com/~toad/lechuga/?cats=55) aunque como nada es perfecto tiene sus desventajas, por ejemplo consume más recursos del servidor, pero a cambio te protege de SPAM y es mucho más cómodo...

en el caso de los pingbacks sí se podría interpretar la codificación, por la etiqueta <meta http-equiv> al leer el HTML...

pero en los trackbacks está difícil la cosa...

Lo único que se me ocurre es quitar todos los acentos y dejarlos por ejemplo "codificacin" para "codificación", aunque sería feo no estropearía el documento...

:(

Saludos...

por Toad, en 2004-08-15 20:34:55

Gravatar

toad y porque no pruebas a convertir la base de datos a iso-8859-1? no deberia ser muy dificil
si usas linux puedes usar iconv

por Zootropo, en 2004-08-15 21:50:24

Gravatar

Prefiero no andar con cosas raras, ahora que ya está así prefiero dejarlo...

Y tu weblog también usa UTF-8 :) :) ;)

Saludos...

por Toad, en 2004-08-15 22:27:54

Gravatar

ya pero yo lo uso a posta :P y seguire con utf-8 a menos que le joda mucho a la gente por los trackbacks y eso... en cuyo caso si me plantearia pasar la bbdd a iso-8859-1 (pero que conste que pienso que deberia pasarse todo el mundo a utf-8 y no al reves)

por Zootropo, en 2004-08-16 10:21:35

Gravatar

Sí, yo también pienso lo mismo...

por Toad, en 2004-08-16 13:16:58

Los comentarios están cerrados: los comentarios se cierran automáticamente una vez pasados 30 días. Si quieres comentar algo acerca de la anotación, puedes hacerlo por e-mail.