![如何修复文件名编码](https://linux22.com/image/83349/%E5%A6%82%E4%BD%95%E4%BF%AE%E5%A4%8D%E6%96%87%E4%BB%B6%E5%90%8D%E7%BC%96%E7%A0%81.png)
我废弃了一个网站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
如果不可用,这可能是一个有用的替代解决方案。