このURLを使用してこのファイルを保存したいと思います。」http://pti.regione.sicilia.it/portal/page/portal/PIR_PORTALE/PIR_LaStrutturaRegionale/PIR_AssessoratoEconomia/PIR_DipBilancioTesoro/PIR_Areetematiche/PIR_ServizioStatistica/PIR_18392744 0del%20settore%20sanit%E0.csv「ソース名を使用して保存しますが、URLエンコード文字にデコードを適用します。
URLの名前はspesa%20del%20settore%20sanit%E0.csv
であり、プログラムでに変換したいと思いますspesa del settore sanità.csv
。ソース名に%20
スペースが含まれて%E0
いますà
。
この名前変換を実行するには?
ここから検索と置換リストを作成できます。テーブルしかし、私はこれを行うことができるユーティリティ、つまりライブラリを持ちたいです。しかし、単にwgetまたはカールを使用してこれを行う正しい方法を見つけることができませんでした。
ありがとう
答え1
以下より一般的にwget
:
ツールはパーセントエンコードオプションを指定することでこれを行うunvis
ことができます。-h
(このツールのOpenBSDおよびMacOSバージョンにはこの機能はありません。)
パーセントでエンコードされた名前はUTF-8形式ではありません。
% printf '%s' 'spesa%20del%20settore%20sanit%E0.csv' unvis-h|hexdump-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 -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
。