Java で URL をエンコードする
-
Java で
URLEncoder
を使用して URL をエンコードする -
Java で
URL
、URI
およびtoASCIIString()
を使用して URL をエンコードする -
Java で
URIBuilder
を使用して 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 で URL
、URI
および 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 Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.
LinkedIn