Filenames

如何保存網路資源,對 URL 編碼字元應用解碼?

  • February 1, 2019

我想用這個 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_idatidellaS %20settore%20sanit%E0.csv " 使用它的源名稱,但保存它,將解碼應用到它擁有的 URL 編碼字元。

我們在 URL 中的名稱是spesa%20del%20settore%20sanit%E0.csv,我想以程式方式將其轉換為spesa del settore sanità.csv. 在源名稱中,我們有%20一個空格,%E0à.

如何進行此名稱轉換?

我可以從這個開始創建一個搜尋和替換列表,但我想有一個實用程序,一個可以為我做的庫。但是,我沒有找到簡單的 wget 或 curl 的正確方法。

謝謝

如果您的 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標頭來提及這一點。--remote-encoding=latin1但是,如果您將選項傳遞給它,它可以由 Wget 處理。

更普遍的不僅僅是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 sanit..csv |
0000001c
% printf '%s\n' 'spesa%20del%20settore%20sanit%E0.csv' | unvis -h | iconv -f latin1
衛生部門的支出
%

進一步閱讀

  • unvis. FreeBSD 通用命令手冊。2010 年 11 月 27 日。
  • unvis. OpenBSD 通用命令手冊。2013-08-12。

引用自:https://unix.stackexchange.com/questions/498111