Как исправить кодировку имени файла

Как исправить кодировку имени файла

Я удалил сайт с wget.

Этот сайт на немецком языке, и некоторые из его страниц содержат Ü,ü,Ö,ö,Ä,ä,ß в URL-адресе.

Теперь некоторые файлы имеют очень странные имена.
Например, один файл называетсяmirror.de/�%9Cbersicht.html

Есть ли способ запустить команду, которая изменит эту странную кодировку на правильную?

В данном примере я бы ожидал следующий результат:mirror.de/Uebersicht.html

EDIT: Вывод 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

решение1

Скорее всего, если вы просто декодируете кодировки %XX URI, вы получите символы в кодировке UTF-8. В zsh:

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

Если, как отметил Жиль, этот символ замены � предназначен для байта 0xc3 (который в iso8859-1 является буквой, которая объясняет, почему он не был закодирован в URI, в отличие от 0x9c, который недопустим в iso8859-1), то приведенная выше команда изменит имя вашего файла наÜbersicht.html

решение2

После декодирования %XXкодировок URI в допустимую кодировку UTF-8 вы также могли бы использовать ее convmv -f utf-8 -t latin-1для преобразования набора символов имени файла.

Это может быть полезным альтернативным решением, если zshоно недоступно.

Связанный контент