Cuando recibes y necesitas manejar múltiples archivos de texto que usan caracteres que no existen en el idioma inglés, puedes enfrentarte al problema de lidiar con diferentes codificaciones de caracteres. Esto es particularmente notable en sitios web, donde si el navegador trata de interpretar el archivo de texto con una codificación que difiere de la codificación actual de el archivo, podemos ver símbolos extraños en donde estos caracteres especiales se supone que debían mostrarse, pero esto no está limitado a sitios web, cualquier programa que se haga para trabajar con lenguajes que no sean inglés podrían presentar un problema similar si no está apropiadamente hecho.
En el caso de archivos HTML, mucha gente, y varios programas por default, optan por cambiar todos estos caracteres especiales con ya sea entidades de HTML (como á en vez de una á) o por un código Iso Latin-1 (como á en vez de una á), pero la verdad es que en estos tiempos todos los navegadores modernos (y no tan modernos) pueden mostrar sin problemas codificaciones como iso-8859-1 y utf-8, todo lo que necesitamos hacer es elegir una codificación para todos los archivos, esto para evitar conflictos, y especificarle al navegador que estamos utilizando esa codificación. Personalmente yo prefiero usar utf-8 ya que lo considero un set mucho más flexible y completo, y a menos que sea requerido en algo más, he estandarizado el uso de utf-8 en todos mis proyectos y en mis sistemas en general.
Para detectar la codificación siendo usada dentro de un archivo, podemos utilizar el comando "file". Este comando trata de autodetectar la codificación que un archivo está utilizando. Si no se detectan caracteres especiales, "file" reporta la codificación del archivo como us-ascii, y nuestro editor usará el set de caracteres que tenga configurado para usar por default. Por supuesto, yo ajusto mis editores para que trabajen con utf-8 por default.
$ file --mime-encoding archivo.txt
Una vez que tenemos la codificación del archivo, podemos transformarlo a una diferente codificación si es necesario, usando:
$ iconv --from-code=iso-8859-1 --to-code=utf-8 archivo.txt > archivo.txt.utf8
$ mv archivo.txt.utf8 archivo.txt
Cambiando la codificación de múltiples archivos
Cuando necesitamos cambiar la codificación de caracteres de un archivo, generalmente debemos cambiar la codificación de caracteres de muchos otros archivos también, para hacer esta operación a varios archivos a la vez podemos utilizar:
for old in *.txt;
do
iconv --from-code=iso-8859-1 --to-code=utf-8 $old > $old.utf8;
done
Una vez hecho esto, podemos renombrar todos los archivos convertidos al nombre del archivo del que se originaron, en efecto, reemplazando el archivo original con la versión recodificada:
for old in *.utf8;
do
cp $old `basename $old .utf8`;
done
basename nos da el nombre de el archivo menos la parte de ".utf8". Si todo está bien, podemos remover los archivos temporales que creamos:
rm *.utf8
Otros ejemplos
Convertir ficheros por lotes a utf-8 (Tomado de ofirpicazo)
find . -name "*.php" -exec iconv -f ISO-8859-1 -t UTF-8 {} -o ../newdir_utf8/{} \;
Convertir una base de datos MySQL de latin1 a utf8
mysqldump --add-drop-table -uroot -p "DB_name" | replace CHARSET=latin1 CHARSET=utf8 | iconv -f latin1 -t utf8 | mysql -uroot -p "DB_name"
No hay comentarios:
Publicar un comentario