我想用这个 URL 保存这个文件“http://pti.regione.sicilia.it/portal/page/portal/PIR_PORTALE/PIR_LaStrutturaRegionale/PIR_AssessoratoEconomia/PIR_DipBilancioTesoro/PIR_Areetematiche/PIR_ServizioStatistica/PIR_1839271.4501140784/PIR_idatidellaSicilia/spesa%2 0del%20settore%20sanit%E0.csv" 使用其源名称,但将其应用解码到其具有的 URL 编码字符来保存。
URL 中的名称是spesa%20del%20settore%20sanit%E0.csv
,我想以编程方式将其转换为spesa del settore sanità.csv
.在源名称中,我们有%20
一个空格,%E0
即à
。
如何进行此名称转换?
我可以从这里开始创建一个搜索和替换列表桌子但我想有一个实用程序,一个图书馆可以为我做这件事。但是,我没有找到简单使用 wget 或 curl 来完成此操作的正确方法。
谢谢
答案1
更普遍的不仅仅是wget
:
该unvis
工具可以通过-h
指定百分比编码的选项来执行此操作。 (注意,该工具的 OpenBSD 和 MacOS 版本没有此功能。)
请注意,您的百分比编码名称不是 UTF-8 格式。
% printf '%s' 'spesa%20del%20settore%20sanit%E0.csv' | unvis-h|十六进制转储-C 00000000 73 70 65 73 61 20 64 65 6c 20 73 65 74 74 6f 72 |安装程序| 00000010 65 20 73 61 6e 69 74 e0 2e 63 73 76 |e 卫生..csv| 0000001c % printf '%s\n' 'spesa%20del%20settore%20sanit%E0.csv' | unvis-h| iconv -f 拉丁语1 spesa del settore sanità.csv %
进一步阅读
答案2
如果您的 Wget 是使用 IRI 支持构建的,那么它将自动处理这种情况。
看看你的wget --version
.我的显示这个:
GNU Wget 1.20.1.7-5dce-dirty built on linux-gnu.
-cares +digest +gpgme +https +ipv6 +iri +large-file +metalink +nls
+ntlm +opie +psl +ssl/gnutls
这里对您来说重要的部分是+iri
.大多数发行版应该在默认启用 IRI 的情况下编译它。
编辑:在这种情况下,服务器似乎发送以 latin-1 编码的文件名。而默认假设始终是 utf-8。理想情况下,服务器应该发送一个Content-Disposition
标头来提及这一点。但是,如果您将选项传递给 Wget,它就可以由 Wget 处理--remote-encoding=latin1
。