有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

安卓 Java。网URI构造函数不是编码字符(&C)

我正在尝试创建一个URL,其中查询参数包含一个符号&;。当我将其传递给Java时。网uri(https://docs.oracle.com/javase/8/docs/api/java/net/URI.html)类构造函数不编码&;符号到%26

例如:https://www.anexample.com:443/hello/v5/letscheck/image/down?name=tom&jerry&episode=2

现在,汤姆和;jerry是查询参数的值,但当我们将其传递给Java时。网uri构造函数它编码所有空格和特殊符号,但不编码&;到26%

所以tom和jerry都成了单独的查询参数,这是我不想要的

代码如下所示:

String query = "name=tom&jerry&episode=2"

URI uri = new URI(scheme, null, host, port, path, query, null);

我还尝试自己对查询参数进行编码,然后将其发送给构造函数,如下所示:

String query = "name=tom%26jerry&episode=2"

URI uri = new URI(scheme, null, host, port, path, query, null);

但在这种情况下,编码参数变成tom%2526jerry,因为%被编码为%25

那么,我如何对其进行编码,以便发送&;内部作为查询参数


共 (1) 个答案

  1. # 1 楼答案

    你试过下面这种方法吗

    String tomJerry = "name=" + URLEncoder.encode("tom&jerry", StandardCharsets.UTF_8.toString());
    String episode = "episode=" + URLEncoder.encode("2", StandardCharsets.UTF_8.toString());
    String query = tomJerry + '&' + episode;
    URI uri = new URI(scheme, null, host, port, path, query, null);
    

    更好的方法是循环查询的键值对,并将URLEncoder应用于该值,然后将查询的其余部分与&连接在一起,或者在streammap之后collect。但关键是对查询字符串的值部分进行编码