Java で URL をエンコードする

Rupam Yadav 2023年10月12日
  1. Java で URLEncoder を使用して URL をエンコードする
  2. Java で URLURI および toASCIIString() を使用して URL をエンコードする
  3. Java で URIBuilder を使用して URL をエンコードする
Java で URL をエンコードする

URL には、ASCII 文字セットに含まれていない文字を含めることはできません。インターネット経由で URL を送信する場合、空白などの文字を追加することはできません。これが、エンコードを使用して無効な文字をプラス記号やパーセント記号などの有効な文字に置き換える理由です。以下のサンプルプログラムでは、さまざまな方法を使用して URL をエンコードする方法を説明します。

Java で URLEncoder を使用して URL をエンコードする

ユーティリティクラス URLEncoder は、特定の URL を application/x-www-form-urlencoded 形式にエンコードするのに役立ちます。以下では、空白で区切られた 3つの単語を含む文字列 q を取り上げます。

URL の末尾に q を連結すると、有効な URL にスペースが含まれていないため、無効な URL になります。これを修正するために、2つの引数を受け入れる URLEncoder.encode() メソッドを使用して q をエンコードします。1つ目はクエリ文字列 q で、2つ目は使用する charset です。

URLEncoder.encode() メソッドは、URL の最後に連結した文字列をクエリとして返します。最後の文字列 encodedUrl を出力すると、有効な URL 全体が表示され、空白がプラス記号に置き換えられます。

import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;

public class EncodeUrl {
  public static void main(String[] args) {
    String q = "learn java language";
    String encodedUrl = "www.google.com/search?q=" + URLEncoder.encode(q, StandardCharsets.UTF_8);

    System.out.println("Encoded Url: " + encodedUrl);
  }
}

出力:

Encoded Url: www.google.com/search?q=learn+java+language

Java で URLURI および toASCIIString() を使用して URL をエンコードする

Java の URL クラスは URL を構築し、URL に関する情報を取得するためのいくつかの便利なメソッドを提供します。URL オブジェクトを返す URL を作成します。次に、URI クラスのコンストラクターを呼び出し、承認の詳細を含む getUserInfo() メソッドを使用して、プロトコル (https/http)userinfo などの URL の情報を渡します。

ここで、getHost() メソッドを使用してホストを取得し、Unicode から ASCII 互換エンコーディング(ACE)に変換します。次の引数は getPort() メソッドを使用してフェッチされたポートです。次に URI のパスを取得し、最後の 2つの引数はクエリと参照です。

すべての引数が URI コンストラクターに渡されると、URI オブジェクトが返されます。このオブジェクトは、toASCIIString() メソッドを使用して ASCII 文字列に変換する URI タイプです。

import java.net.*;

public class EncodeUrl {
  public static void main(String[] args) throws MalformedURLException {
    String q = "learn java language";
    URL urlToEncode = new URL("https://www.google.com/search?q=" + q);

    try {
      URI uri = new URI(urlToEncode.getProtocol(), urlToEncode.getUserInfo(),
          IDN.toASCII(urlToEncode.getHost()), urlToEncode.getPort(), urlToEncode.getPath(),
          urlToEncode.getQuery(), urlToEncode.getRef());

      String finalEncodedUrl = uri.toASCIIString();
      System.out.println("Encoded Url: " + finalEncodedUrl);

    } catch (URISyntaxException e) {
      e.printStackTrace();
    }
  }
}

出力:

Encoded Url: https://www.google.com/search?q=learn%20java%20language

Java で URIBuilder を使用して URL をエンコードする

この例では、ネイティブメソッドの代わりに Apache HttpClient ライブラリを使用します。ライブラリをプロジェクトに含めるために、次の依存関係を使用します。

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.13</version>
</dependency>

org.apache.http.client.utils パッケージの URIBuilder クラスを使用します。URIBuilder のオブジェクトを作成し、そのコンストラクターで urlToEncode クラスを渡します。次に、uriBuilder.addParameter() メソッドを使用してクエリ q をパラメータとして追加し、クエリパラメータとその値を渡します。

最後に、エンコードされた URL 全体を表示する文字列として UriBuilder を出力します。

import java.net.*;
import org.apache.http.client.utils.URIBuilder;

public class EncodeUrl {
  public static void main(String[] args) throws MalformedURLException {
    String q = "learn java language";
    String urlToEncode = "https://www.google.com/search";

    try {
      URIBuilder uriBuilder = new URIBuilder(urlToEncode);
      uriBuilder.addParameter("q", q);
      System.out.println("Encoded Url: " + uriBuilder.toString());

    } catch (URISyntaxException e) {
      e.printStackTrace();
    }
  }
}

出力:

Encoded Url: https://www.google.com/search?q=learn+java+language
著者: Rupam Yadav
Rupam Yadav avatar Rupam Yadav avatar

Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.

LinkedIn