
Я удалил сайт с 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
оно недоступно.