Espero que hayas visto esto también — un mail tal como el de la captura siguiente.foto de Eloy Mier Pérez

En algunas ocasiones te puedes imaginar lo que significa “ basándote en el contexto. En este caso “ es una comilla doble a la izquierda y ’ es un apostrofe. Pero en general ¿quien es el guapo que quiere leer mensajes como estos? ¿que es lo que que causa este comportamiento?

El articulo de hoy va a versar sobre la codificación de caracteres, como funciona en el correo electrónico y en los navegadores web y en como asegurarnos de que nuestros mensajes no sufran los problemas que acabamos de ver.

ASCII

En los inicios de todo este mundo (aparte de Adan y Eva) solo existía ASCII: un simple conjunto de 127 caracteres (7 bits). En tu máquina linux puedes ver la tabla ASCII ejecutando el comando man ascii.

ASCII estaba bien para el idioma Inglés y para la mayor parte de los lenguajes de programación. Lamentablemente pronto los usuarios Españoles, Franceses y Alemanes comenzaron a quejarse: Écoutez! ¡Oye! Paß auf!

127 caracteres no eran suficientes para todos los caracteres que esos lenguajes necesitaban. Los vendedores de Sistemas Operativos decidieron comenzar a usar el 8º bit. Esto solucionó el problema,….mas o menos durante un mes (xD), hasta que los Griegos, Rusos, Chinos, etc. comenzaron también a demandar nuevas soluciones para poder usar del mismo modo sus propios lenguajes.

ISO-8859

En breve existían docenas de codificaciones distintas para todos los lenguajes y sistemas operativos. ISO-8859 fué un intento de estandarizar todos ellos, e incluia ISO-8859-1 o «Latin 1» para lenguajes Europeos Occidentales, ISO-8859-2 para lenguajes Centro Europeos, y así de forma sucesiva.

Algunos programas se modificaron para que comenzasen a usar el  nuevo estandart ISO-8859, pero en cambio otros se aferraban a las antiguas codificaciones, tales como Windows 1252 (lenguajes Europeos Occidentales) y cp1251 (Microsoft Windows 3.1 Cyrillic). Mientras tanto, se encontraban nuevos problemas:: multitud de lenguajes Asiáticos usaban mas de 256 caracteres.

Unicode y UTF

Unicode era la solución: una tabla que incluía todos los caracteres de todos los lenguajes del mundo. Inicialmente se intento que cupiese en 2 bytes — pero 65,536 (216) «code points*» no eran suficientes. En la actualidad Unicode tiene 1,114,112 code points.

La representación de 1,114,112 caracteres requiere 21 bits, sin embargo, nadie quiere usar para cada carácter 3 bytes de longitud. Por lo tanto se desarrollaron los formatos de transformación Unicode. UTF-16 puede representar la mayor parte de los caracteres Unicode en 2 bytes, y crece algún byte mas para representar los caracteres poco usuales o los raramente usados. UTF-8 usa un solo byte cuando es posible hacerlo — para mensajes Ingleses que contienen los 127 caracteres ASCII originales,, UTF-8 es exactamente igual que ASCII.

Conjunto de caracteres en los correos electrónicos

Por lo tanto y visto lo visto, ¿por que vemos esos graciosos caracteres en los mensajes de mail?

Todos los mensajes llegan con una codificación concreta. Puedes usar la funcionalidad de «Encabezado completo» en tu cliente de correo y buscar en el encabezado (en Content-Type) la parte charset= .

Como se puede apreciar en este caso, el encabezado indica que el mensaje ha sido enviado con codificación iso-8859-1; y por lo tanto así lo visualiza mi cliente de correo. Pero tal y como podemos ver el mensaje contiene unas series de tres caracteres con esta pinta ’ que obviamente no era lo que el autor quería. ¿Que es lo que ha pasado?

Comillas inteligentes ¿idiotas?

La mayor parte de las ocasiones, esto se produce por que alguien ha pegado texto desde algún otro programa dentro del mail antes del envío. Esto es especialmente grave cuando se componen textos en un procesador de textos, como por ejemplo MS Word (probablemente el culpable en este caso) o OpenOffice, debido a la funcionalidad llamada «etiquetas inteligentes» o «smart quotes».

Mis comillas dobles en la sentencia anterior son las clásicas dobles comillas ASCII. Por el contrario si escribo esa frase en OpenOffice, él intenta dárselas de ingenioso y asume que quiero decir algo mas: “smart quotes” Nótese que ahora las comillas son cruzadas y por lo tanto aparecen con direcciones opuestas.

La verdad es que se ven bastante mejor ¿verdad? El problema es que ahora esas comillas ya no son caracteres ASCII. Por poner un ejemplo, la doble-comilla cruzada izquierda en Unicode se corresponde con U+201C. En UTF-8, son tres bytes: en hexadecimal, son e2 80 9c.

Esto no es un problema mientras el programa que lo visualice sepa que se corresponde con UTF-8 y decodifique e2 80 9c correctamente. El problema es si pegas esos tres bytes dentro de un cliente de correo que piensa que la codificación es ISO-8859-1, el cliente de correo decodifica de forma incorrecta — y lo que se muestra es “.

Solucionando el problema en el mail

La buena noticia es que muchos clientes de correo proporcionan herramientas para solucionar estos inconvenientes. En nuestro cliente de correo debemos buscar un menú llamado «Codificación de caracteres» o algo similar.

En el caso de que estés viendo secuencias de 2 o 3 bytes puedes probar a cambiar a UTF-8 a ver si eso mejora algo. Por supuesto que también puedes probar otras codificaciones a ver cual de ellas es la que mejor «lee» el mensaje.

¿Y que es lo que pasa con los mensajes que nosotros enviamos?

Lo primero que debemos hacer es verificar que la codificación que tenemos establecida en nuestro cliente de correo tiene un valor sensato. La mayor parte de los clientes de mail tienen alguna opción para configurarla. Si no estás seguro de la codificación que quieres, te recomiendo que uses UTF-8 o ISO-8859-15, que se corresponde con Latin-1 con unos cuantos caracteres adicionales como el carácter de Euro.

Lo segundo es que intentemos no pegar texto en el cliente de mail. Como esto es prácticamente imposible dado que vivimos en la sociedad del copy+paste, deberíamos considerar deshabilitar las comillas inteligentes del procesador de texto y además verificar que tanto el procesador de textos como el cliente de mail usan la misma codificación de caracteres.

Páginas Web

Existe otro caso problemático: la operación de pegado usando como fuente una página web. Las páginas Web, al igual que los mensajes de mail, tienen una codificación. Si copias texto de una página Windows 1252 y lo envías como ISO-8859-15, puede ser que incluso recibas un mensaje de error debido al conjunto de caracteres usado.

Lamentablemente las páginas web no tienen la posibilidad de mostrar las cabeceras al contrario que los mails. En vez de eso, por ejemplo, en Firefox, click derecho sobre la página y seleccionamos «Ver información de página».

Alguna veces el servidor no especifica la codificación y el navegador tiene que intentar averiguarlo. En algunas ocasiones, la adivinación no funciona correctamente. En el caso de que veas caracteres raros en una página web intenta usar la funcionalidad de selección de codificación de caracteres a usar de forma manual de esta manera obligas al navegador a leer la página de otra forma. Un caso claro de este problema, es esta misma página. Intenet Explorer no detecta bien la codificación de la misma, mostrando caracteres extraños.

Bueno pues esto es todo lo que necesitábamos saber de codificación de caracteres.

Hasta la próxima y un saludo a todos.

You must be logged in to post a comment.