miércoles, 9 de noviembre de 2011

Juegos de caracteres en Unix

Hace días estuve trabajando en un proceso de migración de datos. El proceso se ejecutaba en un sistema Unix, y recibía como entrada un simple fichero de texto plano. Pero, ¿cómo no?, ese fichero había sido generado bajo plataforma Windows.

El tema es que aunque el fichero se podía ver perfectamente con cualquier herramienta Windows (notepad++, ultraedit, y hasta el bloc de notas), incluyendo sus acentos y eñes, en el momento en que lo subía al equipo con Unix todo se descuajaringaba. Incluso si volvía a descargar el fichero (tanto la carga como la descarga utilizando Filezilla), pasaba a no verse tampoco en Windows.

Supongo que algún día terminaré de enterarme de los misterios que encierra la codificación de ficheros. Pero de momento me consuelo con saber que tengo una solución para conseguir que mi fiero no sufra mutaciones horrorosas.

Existe una función llamada iconv que permite cambiar la codificación de ficheros en Unix. En mi caso conseguí lo que quería con un simple

iconv --from-code=ISO-8859-1 --to-code=UTF-8 entrada.txt > salida.txt

Incluso podríamos reducirlo más

iconv -f ISO-8859-1 -t UTF-8 entrada.txt > salida.txt

También podemos utilizar la opción -l (o --list) para ver qué codificaciones hay disponibles en nuestro sistema.