Cómo arreglar la codificación del nombre del archivo

Cómo arreglar la codificación del nombre del archivo

Descarté un sitio con wget.

Ese sitio está en alemán y algunas de esas páginas tenían Ü,ü,Ö,ö,Ä,ä,ß en la URL.

Ahora algunos archivos tienen un nombre muy extraño.
Por ejemplo, un archivo se llamamirror.de/�%9Cbersicht.html

¿Hay alguna manera de ejecutar un comando que cambie esa codificación extraña por una adecuada?

En el caso de ejemplo, esperaría lo siguiente como resultado válidomirror.de/Uebersicht.html

EDITAR: Salida de L C_CTYPE=C ls | grep bersicht.html | od -t x1:

0000000 42 69 6e 61 72 79 20 66 69 6c 65 20 28 73 74 61
0000020 6e 64 61 72 64 20 69 6e 70 75 74 29 20 6d 61 74
0000040 63 68 65 73 0a
0000045

Respuesta1

Lo más probable es que si simplemente decodifica las codificaciones URI %XX, obtenga caracteres codificados en UTF-8. En zsh:

autoload zmv
LC_ALL=C zmv '(**/)(*%*)' '$1${2//(#b)%(??)/${(#):-0x$match}}'

Si, como señaló Gilles, ese carácter de sustitución es para un byte 0xc3 (que en iso8859-1 es una letra que explicaría por qué no ha sido codificado con URI, a diferencia de 0x9c, que no es válido en iso8859-1), entonces el El comando anterior cambiaría el nombre de su archivo aÜbersicht.html

Respuesta2

Después de decodificar las %XXcodificaciones URI a UTF-8 válido, también podría haberlas utilizado convmv -f utf-8 -t latin-1para convertir el juego de caracteres del nombre del archivo.

Esta podría ser una solución alternativa útil si zshno está disponible.

información relacionada