我需要解码包含查询字符串的URI;预期的输入/输出行为如下所示:
abstract class URIParser
{
/** example input:
* something?alias=pos&FirstName=Foo+A%26B%3DC&LastName=Bar */
URIParser(String input) { ... }
/** should return "something" for the example input */
public String getPath();
/** should return a map
* {alias: "pos", FirstName: "Foo+A&B=C", LastName: "Bar"} */
public Map<String,String> getQuery();
}我尝试过使用java.net.URI,但它似乎解码了查询字符串,因此在上面的示例中,我只剩下"alias=pos&FirstName=Foo+A&B=C&LastName=Bar“,所以"&”是查询分隔符还是查询组件中的字符都是模糊的。
编辑:--我刚刚尝试了URI.getRawQuery(),它不执行编码,所以我可以用&拆分查询字符串,但是我该怎么办呢?Javascript有decodeURIComponent,我似乎无法在Java中找到相应的方法。
有什么建议吗?我不想使用任何新的库。
发布于 2010-04-13 18:58:56
见URLDecoder类
发布于 2011-08-03 13:12:50
使用
URLDecoder.decode(proxyRequestParam.replace("+", "%2B"), "UTF-8")
.replace("%2B", "+")来模拟decodeURIComponent。Java的URLDecoder将加号解码为空格,这不是您想要的,因此您需要替换语句。
警告:如@xehpuk所指出的那样,如果原始数据(pre form-urlencoded)包含该字符串,则末尾的
.replace("%2B", "+")将破坏您的数据。
发布于 2016-12-14 17:15:10
var reqParam = URLDecoder.decode(reqParam, "UTF-8")https://stackoverflow.com/questions/2632175
复制相似问题