追加読書

追加読書

この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
%

追加読書

  • unvisFreeBSD 共通コマンドマニュアル。 2010年11月27日。
  • unvisOpenBSD 共通コマンドマニュアル。 2013年8月12日。

答え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

関連情報