我正在尝试查找一种方法来解析URL,对它进行解码并以一种明确的方式返回已解码的组件。
因为URLDecoder可能会返回含糊不清的字符串(例如),它并不是合适的选择。
我该如何实现这个?
编辑: 谢谢回答,但我的问题有点不同:我想以一种明确的方式获取解码组件,因此以下任何一种都无法满足我的需求:
因为URLDecoder可能会返回含糊不清的字符串(例如),它并不是合适的选择。
URLDecoder.decode("http://www.google.com?q=abc%26def", "UTF-8")
返回:
http://www.google.com?q=abc&def
因此,关于转义的 & 的信息丢失了。
我想要类似于:
DecodedUrlComponents cmp = GreatURLDecoder.decode(url);
Map<String, List<String>> decodedQuery = cmp.getQuery();
decodedQuery.get("q").get(0); //returns "abc&def"
我该如何实现这个?
编辑: 谢谢回答,但我的问题有点不同:我想以一种明确的方式获取解码组件,因此以下任何一种都无法满足我的需求:
new URI("http://www.google.com?q=abc%26def").getRawQuery()
返回编码查询:q=abc%26def
new URI("http://www.google.com?q=abc%26def").getQuery()
返回模棱两可的值:q=abc&def
URLDecoder.decode("http://www.google.com?q=abc%26def", "UTF-8")
返回模棱两可的值:http://www.google.com?q=abc&def
org.springframework.web.util.UriComponentsBuilder.fromUriString("http://www.google.com?q=abc%26def").build(true).getQueryParams()
- 接近了,但仍然不是我想要的,因为它返回一个编码的参数映射:{q=[abc%26def]}