一尘不染

用Java编码URL查询参数

java

如何在Java中将查询参数编码为URL?我知道,这似乎是一个显而易见且已经提出的问题。

我不确定有两个微妙之处:

  1. 网址上的空格应该编码为“ +”还是“%20”?在chrome中,如果我输入“ http://google.com/foo=?bar me”,则chrome会将其更改为使用%20进行编码
  2. 是否有必要/正确将冒号“:”编码为%3B?Chrome没有。
    笔记:

  3. java.net.URLEncoder.encode似乎不起作用,似乎是为了对要编码的数据进行表单提交。例如,它将空格编码为,+而不是%20,并编码不必要的冒号。

  4. java.net.URI 不编码查询参数

阅读 301

收藏
2020-03-22

共1个答案

一尘不染

java.net.URLEncoder.encode(String s, String encoding)也可以提供帮助。它遵循HTML表单编码application/x-www-form-urlencoded

URLEncoder.encode(query, "UTF-8");

另一方面,百分比编码(也称为URL编码)使用编码空间%20。冒号是保留字符,因此:在编码后仍将保留冒号。

2020-03-22