Estamos migrando el charset de todos nuestro CMS a UTF-8 y con ello el de todos los blogs que gestionamos con él.
El cambio lo intentamos hace ya bastante tiempo pero nos dimos de bruces con un impedimento que parecía insalvable, todo nuestro código está escrito en Vbscript y utilizamos ODBC para conectarnos a mySQL y el conector que había en ese momento (MySQL Connector/ODBC 3.51) no era compatible con UTF8.
Por suerte desde principio de año ya está disponible el nuevo conector/ODBC 5.1 que parece que sí es compatible. Como siempre, las pruebas las está sufriendo este blog y vosotros que me leéis.. y cuando aquí todo vaya bien iremos realizando el cambio en el resto de webs.
El procedimiento ha sido el siguiente:
1 – Leer los siguientes artículos, para refrescar mis parcos conocimientos:
- Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!) de Joel Spolsky.
- Survival guide to i18n de Sam Ruby
2 – Hacer una copia de seguridad de la base de datos de este blog, abrir el archivo resultante (.sql) con ultraEdit y guardarlo con otro nombre en formato utf-8. Modificar el charset en la sentencia CREATE TABLE, cambiando «latin1» por «utf8».
3 – Crear una base de datos nueva (en mySQL 4.1 o superior) e importar el archivo modificado. Ahora los datos de los que se alimenta la web deberían estar todos en UTF-8.
4 – Ahora hay que modificar el meta tag del charset y cambiarlo a utf-8. De esa manera le diremos al explorador que nos visite, que nuestra página está escrita en utf8.
Generando ficheros en formato UTF-8
Una de los problemas que me he encontrado es a la hora de generar los feeds, ya que hasta el momento los metía en una variable y luego el contenido de esa varible lo volcaba en un fichero de texto con FSO (FileSystemObject)
Set fso = CreateObject("Scripting.FileSystemObject")
Set myFile = fso.CreateTextFile(ruta_archivos & FOLDER_ATOMXML & "" & post_uri & ".xml", True)
myFile.Write(entry_v)
myFile.Close
Que funcionaba perfectamente, pero que para crear archivos UTF-8 no vale, por lo que lo hemos tenido que cambiar por algo como esto:
Set fsT = CreateObject("ADODB.Stream")
fsT.Type = 2 'Specify stream type - we want To save text/string data.
fsT.CharSet = "utf-8"
fsT.Open
fsT.writetext entry_v
fsT.SaveToFile ruta_archivos & FOLDER_ATOMXML & "" & post_uri & ".xml", 2
fsT.close
set fsT= Nothing
Asi que os seguiré contando como va esta aventura, que supongo que me terminará dando más lata de la que pienso.