私の Java スタンドアロン アプリケーションは、ユーザーから URL (ファイルを指す) を取得し、それをクリックしてダウンロードする必要があります。私が直面している問題は、HTTP URL アドレスを適切にエンコードできないことです...
例:
URL: http://search.barnesandnoble.com/booksearch/first book.pdf
java.net.URLEncoder.encode(url.toString(), "ISO-8859-1");
返される内容:
http%3A%2F%2Fsearch.barnesandnoble.com%2Fbooksearch%2Ffirst+book.pdf
でも、私が欲しいのは
http://search.barnesandnoble.com/booksearch/first%20book.pdf
(スペースは%20に置き換えられます)
HTTP URL をエンコードするようには設計されていないようですURLEncoder
... JavaDoc には「HTML フォーム エンコード用のユーティリティ クラス」と書かれています... 他にこれを行う方法はありますか?
ベストアンサー1
のjava.net.URIクラスが役立ちます。URLのドキュメントで
URIクラスは、特定の状況下ではコンポーネントフィールドのエスケープを実行します。URLのエンコードとデコードを管理するには、URIクラスを使用することをお勧めします。
次のように、複数の引数を持つコンストラクターの 1 つを使用します。
URI uri = new URI(
"http",
"search.barnesandnoble.com",
"/booksearch/first book.pdf",
null);
URL url = uri.toURL();
//or String request = uri.toString();
(URI の単一引数コンストラクタは不正な文字をエスケープしません)
上記のコードでは不正な文字のみがエスケープされます。非 ASCII 文字はエスケープされません (fatih のコメントを参照)。
このtoASCIIString
メソッドは、US-ASCII 文字のみを含む文字列を取得するために使用できます。
URI uri = new URI(
"http",
"search.barnesandnoble.com",
"/booksearch/é",
null);
String request = uri.toASCIIString();
のようなクエリを含む URL の場合はhttp://www.google.com/ig/api?weather=São Paulo
、コンストラクターの 5 パラメータ バージョンを使用します。
URI uri = new URI(
"http",
"www.google.com",
"/ig/api",
"weather=São Paulo",
null);
String request = uri.toASCIIString();