有时链接中会包含 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,也就是说,它将链接转换为百分比编码,这可能是它保存时无法“正确”呈现文件名的原因。
我发了一个这里有一些相关的问题,其答案可能对这个问题有帮助,也可能没帮助。
答案1
对于 wget,你可以使用:
wget http://www.example.com/файл.zip --restrict-file-names=nocontrol
如果您的系统可以正确处理 UTF-8 或其他编码。
最后,如果您下载的文件中仍然有那些 % 符号,则可以使用 Python 模块urllib.unquote(filename)
将 %xx 转义符替换为等效的单字符符号。
答案2
您可以改用 curl,如下所示
curl -O http://www.example.com/файл.zip
它会将其保存到файл.zip。
答案3
我找不到解决这个问题的方法,wget
但可以成功传输文件午夜指挥官。
答案4
我的回答与巴拉吉·普鲁肖坦。
我必须添加一些.parse
内容才能让它在 python 中运行:
import wget
wget.download(urllib.parse.unquote(url), destination_file)