在 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