Java.net.URI 构造函数不是编码 & 字符
Java.net.URI constructor is not encoding & character
我正在尝试创建一个 URL,其中查询参数包含符号 &。当我将其传递给 Java.net.uri(https://docs.oracle.com/javase/8/docs/api/java/net/URI.html) class 构造函数时,它不会将 & 符号编码为 %26.
示例:https://www.anexample.com:443/hello/v5/letscheck/image/down?name=tom&jerry&episode=2
现在 tom&jerry 是查询参数的值,但是当我们将其传递给 Java.net.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
那么我如何对其进行编码以便将 & 作为查询参数发送到内部?
你试过下面这样的东西吗?
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
应用于该值,然后在 stream
之后或可能将 &
加入查询的其余部分, map
然后 collect
。但重点是对查询字符串的值部分进行编码。
我正在尝试创建一个 URL,其中查询参数包含符号 &。当我将其传递给 Java.net.uri(https://docs.oracle.com/javase/8/docs/api/java/net/URI.html) class 构造函数时,它不会将 & 符号编码为 %26.
示例:https://www.anexample.com:443/hello/v5/letscheck/image/down?name=tom&jerry&episode=2
现在 tom&jerry 是查询参数的值,但是当我们将其传递给 Java.net.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
那么我如何对其进行编码以便将 & 作为查询参数发送到内部?
你试过下面这样的东西吗?
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
应用于该值,然后在 stream
之后或可能将 &
加入查询的其余部分, map
然后 collect
。但重点是对查询字符串的值部分进行编码。