Como pasar un sitio de iso 8859-1 a utf-8
He pensado dejar aquí los pasos que he seguido para la conversión por si a alguien le vienen bien.
En primer lugar hay que hacer un backup de la base de datos, puedes hacerla toda de golpe si no es muy grande:
mysqldump NOMBREBD --add-drop-table > backup.sql
O a trozos como he tenido que hacer yo:
mysqldump NOMBREBD TABLA1 TABLA2 TABLA3--add-drop-table > backup1.sql
El siguiente paso sería convertir ese archivo a utf-8 con este comando:
iconv -f iso-8859-1 -t utf-8 backup.sql > backup_utf8.sql
Pero en mi caso no ha sido necesario ya que el dump directamente me lo convertía a utf-8, asi que mirad primero proque si lo codificasi dos veces os van a salir caracteres raros.
Ahora toca cambiar las codificaciones especificadas en la bd para que al vover a cargarla se creen en utf-8. Yo tenía además de latin1_spanish, latin1_swedish_ci porque ese era el que me ponía por defecto phpmyadmin al crear un nuevo campo, así que he añadido una linea más para reemplazarlo también:
perl -pi -w -e 's/latin1/utf8/g;' backup.sql
perl -pi -w -e 's/latin1_spanish_ci/utf8_unicode_ci/g;' backup.sql
perl -pi -w -e 's/latin1_swedish_ci/utf8_unicode_ci/g;' backup.sql
Y ahora toca subir de nuevo:
mysql
USE NOMBREBD;
mysql ALTER DATABASE `NOMBREBD` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
mysql NOMBREBD < backup.sql
Yo la he subido a otra base de datos previamente creada desde el cpanel a la que con la 2ª línea de arriba le he cambiado la codificación a utf-8 por si las moscas.
No me preguntaeis por los distitos tipos de utf-8 que existen, he leído lo que pone en el manula de mysql y sólo me he enterado de que utf8_unicode_ci es más preciso, y utf8_general_ci más rápido, el resto creoq ue son específicos de idiomas, lo cual no entiendo si se supne que el utf-8 es para cubrir todos los idiomas…
Ya hemos terminado con la BD ahora tocan los archivos. Con este comando puedes cambiarlos desde la consola:
for i in *php ; do
iconv -f iso-8859-1 -t utf-8 $i > $i.UTF
mv -f $i.UTF $i
done
Lo malo es que sólo funciona en el directorio que esté, y no siempre, me he llevado la desagrable sorpresa de que después de pasearme por todos mis directorios y correr ese comando, resulta que la mitad no se habían convertido, y he tenido que convertirlos uno a uno con Notepad ++ que tienen la utilidad de “Convertir a UTF-8 sin BOM“. Muy importante lo de sin BOM ya que os llevareis una desagradable sorpresa si usais sesiones.
Por último si usais gettext para traducir vuestra web a varios idiomas acordaros de que poner el archivo .po en UTF-8 y muy importante bind_textdomain_codeset, yo no lo estaba usando porque creía que al estar en el poedit ya en utf-8 no haría falta, pero si que hace.
Para conseguir la conversión he seguido las indicaciones de estas página:


No Comments, Comenta o Ping
Reply to “Como pasar un sitio de iso 8859-1 a utf-8”