Un interesante capítulo: el UTF-8/UNICODE.
Para muchos de los desarrolladores web, la famosa línea <meta http-equiv=»Content-Type» content=»text/html; charset=iso-8859-1″> es algo rutinario que apenas prestamos atención.
Mal hecho!!
De igual forma que nos agrada que los angloparlantes nos tomen en consideración, y se den cuenta de que hay otra gente en el mundo, también nosotros debemos tomar en cuenta que existen otros idiomas, y sobre todo otras codificaciones/juegos de caracteres.
Nos gusta que se vea nuestra «ñ», pero también debemos mostrar la beta alemana, o la ç francesa, por ejemplo.
Además, ahora que está tan de moda la globalicación y esas cosas… no debemos luchar contracorriente.
Seguro que en multitud de ocasiones hemos visto páginas en las que aparecían caracteres, raros, inconexos: son páginas mal codificadas. Su webmaster no nos ha tenido en cuenta.
¿Qué conseguiremos con todo esto?
- Pues que nuestras páginas sean realmente visibles en todo el mundo.
- Que en cualquier campo formulario podamos copiar/pegar sin preocuparnos de los caracteres raros. El navegador mostrará todo correctamente.
La codificación de caracteres más utilizada es UTF-8. UTF-8 toma los primeros 127 caracteres del estándar Unicode (que son los caracteres latinos básicos, A-Z, a-z y 0-9, y algunos caracteres de puntuación) y los asigna directamente a valores de un solo byte. A continuación, aplica una técnica de desplazamiento de bits, utilizando el bit alto de los bytes para codificar el resto de los caracteres Unicode.
Comparemos el utf-8 con el iso-8859-1, por ejemplo.
- Todos los caracteres del rango 0-127 (en hexadecimal 00 a 7F), son representados exactamente igual en ambas codificaciones. Esto cubre el rango de los caracteres ASCII originales.
- Todos los caracteres iso-8859-1 en el rango 128-191 (80 a BF hexadecimales) en utf-8 necesitan estar precedidos por un byte con el valor 194 (C2 hexadecimal). Quitando esto, son dejados intactos.
- Todos los caracteres iso-8859-1 en el rango 192-225 (C0 a FF hexadecimales), en utf-8 no sólo necesitan estar precedidos por un byte de valor 195 (C3 hex), sino que es necesario restarles el valor 64 (40 hex) de su valor iso-8859-1. Por ejemplo, la «ñ» (241 decimal, F1 hex) sería un 195 seguido de un 177 (C3 B1 hex).
El resultado de todo esto es que el carácter sueco å (0xE5) se convierte en el galimatías de 2 bytes Ã¥ (0xC3 0xA5). Así que, a menos que se puedan realizar desplazamientos de bits en la cabeza, el ser humano no puede leer la codificación de datos en UTF-8.
La propiedad Contenido-Tipo es opcional y en algunas aplicaciones, se elimina la información del encabezado HTTP y sólo aparece HTML. Para solucionar esto, el grupo de estándares HTML definió una metaetiqueta opcional como un modo de especificar el juego de caracteres en el propio documento HTML, para que éste fuese autodescriptivo.
<META HTTP-EQUIV=»Content-Type» CONTENT=»text/html; charset=ISO-8859-1″>En este caso, el juego de caracteres ISO-8859-1 declara que en esta página HTML concreta, el valor de byte de 229 significa å . Esta página carece de ambigüedad en cualquier sistema y los datos no se malinterpretan. Por desgracia, debido a que esta metaetiqueta es opcional, aún se producen errores.
XML ha tomado estas ideas de HTML y las ha llevado incluso más lejos, definiendo un algoritmo totalmente inequívoco para determinar la codificación del juego de caracteres utilizada. En XML, un atributo de codificación opcional en la declaración XML define la codificación de caracteres.
Si el archivo empieza con una marca de orden de byte Unicode [0xFF 0xFE] o [0xFE 0xFF], se considera que el documento está en la codificación UTF-16. De lo contrario, está en UTF-8