viernes, 6 de diciembre de 2013

Renombrar archivos con caracteres raros en el nombre

En algunas ocasiones cuando usamos ficheros que se han creado en entorno windows, y estos incluyen en el nombre algún acento, alguna letra Ñ o algún carácter especial, aparecen símbolos como este �. Sobre todo al descomprimir archivos .rar o .zip

Esto solo pasa con archivos que se han creado y/o comprimido en entorno Windows, ahora explico el porqué. El problema no proviene de un fallo de incompatibilidad o configuración de Debian GNU/Linux. Todo lo contrario procede de una incompatibilidad entre el sistema Windows donde el fichero fue creado y/o comprimido y el resto de sistemas operativos existentes.

 En Debian GNU/Linux : 

Al igual que en casi todos los sistemas operativos: Ubuntu, Red hat, Centos, MacOSX, Android, y un largo etc... el formato de codificación de caracteres utilizado es UTF-8, el cual usa un estándar, llamado Unicode, creado y adoptado por la mayoría de empresas del sector, y diseñado para facilitar el tratamiento informático, transmisión y visualización de textos de múltiples lenguajes y disciplinas técnicas además de textos clásicos de lenguas muertas.

 En Microsoft Windows :  

El problema reside en, que el fichero fue comprimido en Microsoft Windows y, como siempre suele hacer Microsoft, no utiliza los estándares tales como UTF-8, usa sus propios formato de codificación no compatibles con el resto (Windows-1252 para idiomas occidentales, Windows-1253 para griego, Windows-1254 para turco, Windows-1256 para árabe,...).  


Gestor de archivos Dolphin

En Dolphin los archivos con dichos caracteres raros en el nombre son inaccesibles, y no podemos hacer prácticamente nada:


- No se puede reproducir (si son archivos multimedia)
- Ni se puede ejecutar (si son archivos de programa; como .Jar de Java, .exe de wine)
- No se puede ver la vista preliminar
- No se puede copiar
- No se puede mover
- No se puede renombrar
- No se puede borrar

En resumen Dolphin no puede gestionar dichos archivos. Esto es un error importante que tiene solución en Debian utilizando otros gestores de archivos, pero que aun no ha sido implementado en Dolphin. Esperamos que los desarrolladores los implementen en futuras versiones.


Soluciones


Existen varias soluciones (cosa normal en entorno Unix / Linux) para corregir este error.
Tales como usar algunos de estos comandos en consola o algunos de estos gestores de archivos en entorno gráfico:

En linea de comando desde una consola:

- mv
- convmv
- mc (Midnight Commander)

En entorno gráfico:

- Konqueror
- Nautilus
- PcMan File Manager 
- Thunar


Algunas capturas de pantallas


Konqueror - observamos como ha detectado el error en la codificación


Aquí vemos como hemos seleccionado el primero de ellos, con el botón derecho del ratón y seleccionamos Cambiar el nombre....


Aquí aparece el nombre con el error para poder substituirlo


Ya le hemos indicado el nuevo nombre, en este caso le hemos corregido el error.


Aquí podemos observar como tenemos 3 archivos que hemos corregido el error.
___________________________________________________________________________


Nautilus, aquí observamos como nautilus, también detecta y puede corregir el error

----------------------------------------------------------------------------------------------------------


PCManFM, este otro gestor de archivos también esta preparado para corregir el error, en las siguientes capturas de pantallas vemos la secuencia de como corregir el error.





=============================================


Thunar, este gestor de archivos es el único capaz de corregir el error en multiples ficheros a la misma vez. 










convmv: Renombrar múltiples archivos o carpetas desde consola

El comando convmv se utiliza para cambiar la codificación de caracteres de los nombres de archivo. No viene instalado por defecto en Debian GNU/Linux. Para instalarlo usamos el programa synaptic, tal y como hacemos siempre en este blog.

# apt-get install convmv




Después, nos situamos en la carpeta dónde están los archivos o carpetas que se quieren corregir y se ejecuta este comando:

convmv -r -f cp1252 -t utf-8 * --notest


Significado de los parámetros del comando:

- -r  -  especifica que el comando corregirá los nombres de archivo de modo recursivo, es decir, los nombres de archivo de los archivos de la carpeta actual y los de todas las carpetas que están incluidas en ésta.
- -f  -  especifica la codificación de caracteres que tienen los archivos que se quieren convertir.
- cp1252  -  codificación de caracteres por defecto de Windows
- -t  -  especifica la codificación de caracteres a la que se quiere convertir los nombres de archivo.
- utf-8  -  codificación de caracteres por defecto en Debian.
- *  -  indica que el cambio afectará a todos los archivos. 
--notest  -  especifica que no es una prueba. Si no se incluye, el comando sólo muestra cómo quedarían los nombres de archivo, pero no realiza ningún cambo.



OBSERVACION: Conviene ejecutar primero el comando sin el parámetro --notest. Si el resultado no es el esperado, se puede probar con otra codificación de caracteres. Para ver la lista de codificaciones disponibles, ejecutar convmv --list. Si alguno de los parámetros indicados no es útil, no hay que incluirlo.  Para ver la lista completa de opciones del comando, ejecutar convmv --help y para ver su página de manual, ejecutar man convmv. Para  salir del comando man,  pulsar q.


 Algunas capturas de pantallas



Aquí podemos ver como dolphin a detectado el error en la codificación de los caracteres, cambiando las vocales acentuadas por el signo + seguido de una interrogación



Como vamos a usar el método de consola, usando el comando convmv, pulsamos en el menú  Ver > Paneles > Terminal.


Observamos como en la parte inferior de dolphin se abre una consola de terminal, ya situada en la carpeta en la cual nos encontramos


Ahora hemos introducido el comando: conmv -r -f cp1252 -t utf-8 * --notest


Aqui he marcado en verde el comando introducido para que sea mas legible



Al pulsar intro, observamos el resultado del comando, observamos como en la columna de la izquierda esta el nombre con el error de codificación, y en la columna de la drecha se encuentra el error ya corregido.









7 comentarios:

Malagueños Originales y Libres dijo...

Fíjate que casualidad que yo he escrito un artículo para evitar el problema:
http://malagaoriginal.blogspot.com.es/2013/12/la-forma-correcta-de-poner-un-nombre-un.html

Marcos dijo...

@Malagueños Originales y Libres

Ese problema viene con la aparición de Windows y su famoso teclado Windows (valga la redundancia) el cual, se paso por el arco de triunfo todos los estándares de la época en cuanto a mecanografía se refiere. Ese hecho tuvo consecuencias nefastas para todas las plataformas de hardware y software de la época ya que cambio la disposición de ciertos caracteres especiales en el teclado por eso se llama teclado Windows, porque es ideado por ellos y no es el estándar. Debido a ese cambio se modifico la hasta la fecha inquebrantable tabla de código ASCII, lo que provocó que algunos caracteres especiales tuvieran un código diferente al estándar. Resultado, corrupción en el nombre cuando lo intentas leer en una plataforma no Windows.

La prueba la tienes fácil de comprobar, si ves un ordenador MSX, Atari ST, Amiga podrás comprobar que la disposición del teclado no es exactamente igual, los caracteres especiales están cambiados. Es más si tienes la oportunidad de ver una máquina de escribir (una de las famosas Olivetti Lettera de la época por ejemplo, seguro conocerás a alguien que conserve alguna) también podrás verlo.

Es una manera muy sucia de iniciar un monopolio así que yo no tengo porque corregir mis nombres de archivos si los envió con un sistema diferente, que lo arreglen ellos si quieren o que vuelvan al estándar internacional.

Por cierto lo de usar 8.3 me parece muy fuerte. Sobre todo porque esa porquería había sistemas que no lo usaban ni lo necesitaban. Sin ir mas lejos, el Amiga OS (incluso el de esa época) identificaba los ficheros por su cabecera no por su extensión. La extensión se la ponía el usuario pero mas que nada por comodidad a la hora de identificarlo no porque el sistema no supiera que tipo de archivo estaba abriendo. Compruébalo con algún emulador si quieres.

En resumen, si yo uso un sistema operativo (el que sea) que respeta todos los estándares internacionales yo NO tengo porque modificar nada para que ellos lo vean bien que lo arreglen en Microsoft, si quieren. Es SU problema por saltarse el estándar establecido.

No los modificaba antes cuando era usuario de Amiga y mucho menos ahora que uso Linux.

Usuario_Debian dijo...

Hola Marcos.

Esta entrada esta realizada debido a los ficheros que recibimos de los usuarios de windows. Ya que como bien sabes microsoft siempre se ha pasado por el arco del triunfo todos los estándares.

Si necesitamos leer por ejemplo un documento y esta mal codificado lo tendremos que arreglar si o si para poder ver la información.

Esta entrada esta pensada para nosotros y no para ellos. Para poder usar los archivos que recibimos de usuarios de windows con su propia codificación.

Saludos

Marcos dijo...

Hola de nuevo.

Efectivamente he comprendido el objeto de tu entrada ya que viene explicado de una manera cristalina que no deja lugar a dudas de ahí que no hiciese referencia a ella.

Escribí todo eso en respuesta al primer comentario. El propone unos consejos que básicamente son para que los usuarios de Windows no tengan problemas con nuestros archivos. Eso no es aceptable cuando son ellos los que no respetan el estándar establecido. Si ellos tienen problemas que hagan como nosotros. De igual modo que nosotros tenemos que arreglar su desaguisado como bien explicas en tu entrada, nosotros no tenemos que adaptar nuestros ficheros para que ellos no tengan problemas como proponen en el primer comentario.

A fin de cuentas fue Microsoft quien se salto la tabla ASCII y la disposición del teclado cuando el resto de la humanidad usaba esos estándares.

Como bien indicas en tu comentario de momento nosotros tendremos que corregir lo que nos venga de Windows para no tener ningún problema. Al menos hasta que Microsoft vuelva al formato estándar que lo dudo. Ahora bien, al igual que nosotros tenemos que buscarnos la vida pues ellos que se la busquen también no como proponen en el primer comentario.

Un saludo y felices fiestas :)

soymicmic dijo...

¿Y hay alguna forma de hacerlo en ficheros comprimidos? Quiero decir ficheros comprimidos con archivos dentro que tienen caracteres invalidos.

Con Debian no me deja descomprimir archivos con caracteres invalidos

Bikooo2 dijo...

Pues gracias por la solucion, me ha venido tarde, pero para la proxima ya se que hacer

adramesc dijo...

Genio total! Gracias, solucionaste mi problema. Comento y actualizo al 10/06/2016.
El procedimiento tambien funciona en Arch Linux KDE. La forma de instalar 'convmv' es: yaourt -S convmv.
Despues lo usan tal cual esta comentado.