JavaでのHTTP URLアドレスエンコーディング 質問する

JavaでのHTTP URLアドレスエンコーディング 質問する

私の 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();

おすすめ記事