作者:mobiledu2502872407 | 来源:互联网 | 2023-10-10 21:14
URLEncoder
是要走的路。您只需要记住仅对 单个查询字符串参数名称和/或值进行编码,而不是对整个 URL 进行编码,当然不是查询字符串参数分隔符&
,也不是参数名称-值分隔符=
。
String q = "random word 拢500 bank $";
String url = "https://example.com?q=" + URLEncoder.encode(q, StandardCharsets.UTF_8);
当您仍然不在 Java 10 或更高版本上时,请使用StandardCharsets.UTF_8.toString()
charset
参数,或者当您仍然不在 Java 7 或更高版本上时,请使用"UTF-8"
.
请注意,查询参数中的空格由+
, not表示%20
,这是合法有效的。%20
通常用于表示 URI 本身中的空格(URI
查询字符串分隔符之前的部分)?
,而不是查询字符串中的空格(之后的部分?
)。
另请注意,共有三种encode()
方法。一个没有Charset
作为第二个参数,另一个String
作为第二个参数引发检查异常。不推荐使用没有Charset
参数的。永远不要使用它并始终指定Charset
参数。javadoc甚至明确建议使用RFC3986和W3C规定的 UTF-8编码。
所有其他字符都是不安全的,并且首先使用某种编码方案将其转换为一个或多个字节。然后每个字节由 3 个字符的字符串“%xy”表示,其中 xy
是字节的两位十六进制表示。 。但是,出于兼容性原因,如果未指定编码,则使用平台的默认编码。
也可以看看:
- 每个 Web 开发人员必须了解的有关 URL 编码的知识