在 Java 中編碼 URL

Rupam Yadav 2023年1月30日 2021年6月30日
  1. 在 Java 中使用 URLEncoder 對 URL 進行編碼
  2. 在 Java 中使用 URLURItoASCIIString() 對 URL 進行編碼
  3. 在 Java 中使用 URIBuilder 對 URL 進行編碼
在 Java 中編碼 URL

URL 不能包含未包含在 ASCII 字符集中的字元。當我們想通過 Internet 傳送 URL 時,我們不能附加像空格這樣的字元;這就是為什麼我們使用編碼將無效字元替換為有效字元(如加號或百分號)的原因。在下面的示例程式中,我們將看到如何使用不同的方法對 URL 進行編碼。

在 Java 中使用 URLEncoder 對 URL 進行編碼

實用程式類 URLEncoder 幫助我們將給定的 URL 編碼為 application/x-www-form-urlencoded 格式。下面,我們採用包含三個單詞的字串 q,用空格分隔。

如果我們在 URL 的末尾連線 q,它將是一個無效的 URL,因為有效的 URL 不包含空格。為了解決這個問題,我們使用 URLEncoder.encode() 方法對 q 進行編碼,該方法接受兩個引數:第一個是查詢字串 q,第二個是要使用的 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 中使用 URLURItoASCIIString() 對 URL 進行編碼

Java 中的 URL 類構造一個 URL,併為我們提供了幾種有用的方法來獲取有關 URL 的資訊。我們建立返回 URL 物件的 URL。接下來,我們呼叫 URI 類的建構函式,並使用包含授權詳細資訊的 getUserInfo() 方法傳遞 URL 資訊,如協議 (https/http)userinfo

現在,我們使用 getHost() 方法獲取主機並將其從 Unicode 轉換為 ASCII 相容編碼 (ACE)。下一個引數是使用 getPort() 方法獲取的埠,然後我們獲取 URI 的路徑,最後兩個引數是查詢和引用。

一旦所有引數都傳遞到 URI 建構函式中,它將返回一個 URI 物件。該物件屬於 URI 型別,我們使用 toASCIIString() 方法將其轉換為 ASCII 字串。

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 新增為引數,並傳遞查詢引數及其值。

最後,我們將 UriBuilder 列印為顯示整個編碼 URL 的字串。

import org.apache.http.client.utils.URIBuilder;

import java.net.*;

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
Author: 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