在 Java 中編碼 URL
-
在 Java 中使用
URLEncoder
對 URL 進行編碼 -
在 Java 中使用
URL
、URI
和toASCIIString()
對 URL 進行編碼 -
在 Java 中使用
URIBuilder
對 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 中使用 URL
、URI
和 toASCIIString()
對 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 Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.
LinkedIn