Cambiar codificación de archivos en Linux

Un problema que tuve con Slackware en su momento y que tuve ahora con Arch Linux es que archivos que generé en Windows tienen una codificación diferente a la que tiene mi sistema Linux y como es de esperarse no los reconoce. Mi sistema tiene codificación UTF-8 y los archivos que causan conflictos están en ISO-8859-1, los cuales en el nombre de los archivos, muestran un símbolo de un rombo negro con un signo de interrogación dentro en las letras que tienen (o deberían tener) acentos, esto me sucedía tanto en Dolphin como en el terminal.

Al tratar de cambiar el nombre o eliminar dichos archivos salía un mensaje que decía que dicho archivo no existía y no podía ser encontrado.

Primero intenté cambiar mi codificación en el archivo /etc/rc.conf, abrí el archivo y noté que al instalar Arch solo generé las siguientes locales:

$ locale -a
C
es_MX
es_MX.iso88591
es_MX.utf8
POSIX

Pues cambié mi codificación de UTF-8 a ISO-8859-1 haciendo:

$ kdesu kwrite /etc/rc.conf

Y reemplazando la línea:

LOCALE="es_MX.UTF-8

por esta otra:

LOCALE="es_MX.iso88591"

Guardé y reinicié mi sistema, y al volver a checar mis archivos ahora sucedía alrevés por que eran los archivos con codificación UTF-8 los que mostraban signos raros en las letras de nombres de archivos y directorios que deberían tener acentos.

Bueno, regresé mi codificación a UTF-8 y decidí a solucionar mi problema de otra forma. Me la pasé buscando en internet por varios sitios hasta que encontré dos aplicaciones interesantes.

La primera es: iconv

Según su página man la utilidad iconv convertirá la codificación de caracteres en el archivo de un conjunto de códigos a otro y escribirá los resultados en la salida estándar.
Las opciones que puede tomar son:

-f para identificar la codificación del archivo de entrada
-t para especificar la codificación del archivo de salida

El ejemplo siguiente convierte el contenido del archivo mail.x400 del conjunto de caracteres estándar ISO/IEC 6937:1994 al conjunto de códigos estándar ISO/IEC 8859-1:1998, y almacena los resultados en el archivo de mail.local (ejemplo de la página man):

iconv -f IS6937 -t IS8859 mail.x400 > mail.local

La segunda es convmv

Convierte nombres de archivos de una codificación a otra y de hecho fue la herramienta que me solucionó la situación.

Las opciones -f y -t son similares a las de iconv sin embargo para cambiar la codificación en el nombre de un archivo hay que agregar al final la opción –notest (con dos guiones) por que sino únicamente ejecuta una prueba y nos dice si se puede tener éxito en el cambio o no. Como no se reconoce el nombre del archivo empiezo escribiendo las primeras letras y presionando la tecla TAB para completarlo de manera automática aún sin reconocer la codificación del archivo de entrada. Cuando hay más archivos que empiezan con nombres parecidos es un problema pues TAB muestra todos los nombres parecidos, entonces opté por usar * y la extensión del archivo para que me cambie todos.

El comando para cambiar de ISO-8859-1 a UTF-8 es:

$ convmv -f ISO-8859-1 -t UTF-8 Nombre_archivo --notest

Para mi caso apliqué:

$ convmv -f ISO-8859-1 -t UTF-8 Repartici�n.xls --notest

Ahora cambiar los archivos de uno por uno es muy tardado por lo que esta opción cambiará todos los archivos de la misma extensión para acelerar el proceso de muchos archivos:

$ convmv -f ISO-8859-1 -t UTF-8 *.xlsx --notest

Y para cambiar todos los archivos de un directorio y sus subdirectorios, basta con usar la opción de recursividad y el “comodín” de asterisco:

$ convmv -r -f ISO-8859-1 -t UTF-8 * --notest

Bueno al parecer una solución mas.

Fuentes:

http://www.ebitacora.com/codificacion-de-archivos-iso-8859-1-a-utf-8-desde-linux.html
http://www.gentoo.org/doc/es/utf-8.xml

Anuncios

3 pensamientos en “Cambiar codificación de archivos en Linux

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s