在 Java 中編碼 URL

Rupam Yadav 2023年10月12日
  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 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