如何修復檔案名稱編碼

如何修復檔案名稱編碼

我廢棄了一個網站wget

該網站是德語的,其中一些頁面的 URL 中包含 Ü,ü,Ö,ö,ä,ä,ß。

現在有些文件有一個非常奇怪的名稱。
例如一個檔案名稱mirror.de/�%9Cbersicht.html

有沒有一種方法可以運行一個命令,將奇怪的編碼更改為正確的編碼?

在範例情況下,我期望以下結果為有效結果mirror.de/Uebersicht.html

編輯: 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}}'

如果正如 Gilles 所指出的,該 � 替換字元用於 0xc3 位元組(在 iso8859-1 中是一個字母,可以解釋為什麼它沒有被 URI 編碼,這與在 iso8859-1 中無效的 0x9c 相反),那麼上面的命令會將你的檔案名稱改為Übersicht.html

答案2

將 URI 編碼解碼為有效的 UTF-8後%XX,您也可以用來convmv -f utf-8 -t latin-1轉換檔案名稱的字元集。

zsh如果不可用,這可能是有用的替代解決方案。

相關內容