jueves, octubre 12, 2006

UTF-8

Lo primero que hacemos es investigar.

Que es UTF-8? Las siglas corresponden a Unicode Transformation Format, y es un sistema de codificación variable del sistema de mapeo de caracteres de Unicode.

A continuación se detalla la información técnica extraida de wikpedia:

Los caracteres más pequeños que 128dec son codificados con un byte sencillo que contiene su valor: este corresponde exactamente a los caracteres de 7 bits de los 128 del ASCII. En los demás casos, se utilizan de 2 a 4 butes. El bit más signifiactivo de todos los bytes de esta cadena es siempre 1, para prevenir la confusión con los caracteres de 7-bits del ASCII, particularmente los caracteres menores a 32dec, tradicionalmente llamados caracteres de control.

000000 - 00007F
0xxxxxxx
rango equivalente en ASCII; byte empieza con cero
000080 - 0007FF
110xxxxx 10xxxxxx
primer byte empieza con 110 o 1110, el siguiente byte(s) empieza con 10
000800 - 00FFFF
1110xxxx 10xxxxxx 10xxxxxx
010000 - 10FFFF
11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
UTF-16 require sustitutos; una compensación de 0x10000 es substraída, así el bit patrón no es idéntico con UTF-8

De este modo, los primeros 128 caracteres necesitan un byte. Los siguientes 1920 caracteres necesitan dos bytes para ser codificados. Esto incluye caracteres del Alfabeto Latino con diacríticos, griego, cirílico, cóptico, armenio, hebreo y arábigo. El resto de los caracteres usan tres bytes y caracteres adicionales son codificados con 4 bytes.

Dentro del rango de codificación con tres bytes se encuentran se encuentran el coreano, chino y japonés.

Ahora vamos a hablar de la integración de UTF-8 dentro de Moodle:

Debido a que Moodle precisa de una base de datos para persistencia, y php como intérprete para la lógica del programa, es preciso que ambos soporten UTF-8.

En el caso de MySQL se soporta UTF-8 a partir de la versión 4.1 posterior, en el caso de postgres a partir de la versión 8.1. El caso más complejo parce ser con PHP ya que internamente utiliza ISO-8859-1 para codificar los strings, si bien dispone de funciones como utf8decode() y utf8uncode() a partir de la versión 3. Por tal motivo, a la hora de trabajar con string en PHP, si dichos strings están codificacodos en UTF-8 hay que tener cuidado.

Por ejemplo:

Si contamos el número de caracteres del string Iñtërnâtiônàlizætiøn
echo strlen('Iñtërnâtiônàlizætiøn');
Obtendremos 27 caracteres debido a que php strlen cuenta el número de bytes sin tener encuenta que en UTF-8 se utilizan los bits de inicio de cada byte para informar la longitud de bytes correspondiente al caracter codificado.

En teoria a partir de la versión 6 de PHP se soportará nativamente la cosificación UTF-8.

Pero que hacemos mientras tanto? Pasarle el problema al navegador, y decirle al navegador que todo está codificado con UTF-8. Esto se hace informando en la cabecera http la codificación a emplear de la siguiente manera dentro de un tag meta:
http-equiv="Content-Type" content="text/html; charset=utf-8"

Esto resuelve la mayoria de los problemas, aunque no todos.

Luego de este inciso, volvemos a Moodle. Si la base de datos los soporta, al instalar una versión posterior a 1.6 ya dispondremos de codificaión UTF-8. En caso de migrar desde una versión anterior de Moodle, si la base de datos lo soporta se migrará a UTF-8. en el futuro es posible que sea un requisito disponer de una versión de base de datos con soporte UTF-8.

Con esto quiero decir que si el sistema lo soporta y se tienen instalado Moodle 1.6 o superior, el "kernel" de moodle ya funcionará con UTF-8.

Otro tema son los módulos no oficiales. Moodle ha informado el proceso para que los desarrolladores de modulos no oficiales puedan migrar las tablas que precisen para que se codifique la información en UTF-8. En el caso que nos ocupa a nosotros este trabajo ya está hecho, y puede apreciarse en el archivo migrate2utf8.xml donde se informa que campos deben convertirse y en el archivo migrate2utf8.php que define cono debe hacerse la conversión. Ambos archivos se encuentran en la carpeta /moodle/mod/wiki/db.

Conclusión:
Si el sistema lo soporta y está bien configurado se puede trabajar perfectamente con Moodle y las Wiki´s utilizando codificación UTF-8.
smile

Links de interés sobre este tema:

http://www.unicode.org/standard/principles.html

http://www.phpwact.org/php/i18n/charsets?s=utf8

http://docs.moodle.org/en/UTF-8_contrib

http://textpattern.net/wiki/index.php?title=Unicode_Support#UTF-8_Support_in_MySQL

http://www.phpwact.org/php/i18n/charsets%23common_problem_areas_with_utf-8


http://es.php.net/strings

No hay comentarios: