如何使用 wget 下载带有 unicode 的链接?

Str*_*sky 14 unicode wget

有时链接中包含 unicode 字符,例如http://www.example.com/????.zip

如果您将浏览器指向它,它会正确提示您将文件下载为 ????.zip。但是,如果您尝试使用 来执行此操作wget,则该文件会混合使用 ?、百分比编码(如 %D0%BB)和(invalid encoding)文件名后的字符串。

我可以向 wget 或任何其他命令行技巧添加哪些参数,以便它像 Chrome 和 Firefox 一样运行并完全按照渲染链接中的指定保存文件 - 在这种情况下,为 ????.zip?

该解决方案应该无需在命令中显式写入即可工作,因此显式wget -O ????.zip http://www.example.com/????.zip不是一个好的解决方案。

我意识到一旦您运行wget http://www.example.com/????.zip它就会尝试检索http://www.example.com/%D1%84%D0%B0%D0%B9%D0%BB.zip,即将链接转换为百分比编码,这可能是它保存它没有“正确”呈现文件名的原因。

我在这里发布了一个有点相关的问题,他的回答可能对这个问题有帮助,也可能没有帮助。

小智 23

对于 wget,您可以使用:

wget http://www.example.com/????.zip --restrict-file-names=nocontrol
Run Code Online (Sandbox Code Playgroud)

如果您的系统可以正确处理 UTF-8 或其他编码。

最后,如果您下载的文件中仍有那些 % 符号,您可以使用 Python 模块urllib.unquote(filename)将 %xx 转义替换为其等效的单字符。

  • 这应该标记为已接受的答案,如果可以在 curl OP 中完成此操作以及人们使用 wget 执行的其他所有操作(例如递归下载),并且其他人可能已经完成了。 (3认同)

Joh*_*Siu 3

您可以使用curl代替,如下所示

\n\n
curl -O http://www.example.com/\xd1\x84\xd0\xb0\xd0\xb9\xd0\xbb.zip\n
Run Code Online (Sandbox Code Playgroud)\n\n

它将保存到 \xd1\x84\xd0\xb0\xd0\xb9\xd0\xbb.zip。

\n