在 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