Detectando y cambiando la codificación de caracteres en archivos de texto
In English  

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 &#225 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