UTF-8, probado, probando… 漢音

Estamos migrando el charset de todos nuestro CMS a UTF-8 y con ello el de todos los blogs que gestionamos con él.

Hasta el momento utilizábamos ISO-8859-1 (latin1), que para escribir en español va de maravilla, pero más allá de eso no da más de si y para CompareBlogs necesitamos más porque tenemos usuarios que han dado de alta blogs en muchos idiomas y cuando intentamos importar sus tags o cualquier otra información de las apis de delicious, technorati o bloglines nos encontramos con que muchas veces no podemos hacerlo porque el contenido ha sido escrito en griego, japonés o quién sabe.

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:

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.


Publicado

en

por