我需要解码包含查询字符串的 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 http://java.sun.com/j2se/1.5.0/docs/api/java/net/URI.html,但它似乎对查询字符串进行了解码,因此在上面的示例中,我留下了“alias=pos&FirstName=Foo+A&B=C&LastName=Bar”,因此“&”是查询分隔符还是其中的字符存在歧义一个查询组件。
Edit:我刚刚尝试过URI.getRawQuery() http://java.sun.com/j2se/1.5.0/docs/api/java/net/URI.html#getRawQuery%28%29它不进行编码,所以我可以用一个分割查询字符串&
,但那我该怎么办呢? JavaScript 有解码URI组件 https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Functions/decodeURIComponent,我在Java中好像找不到对应的方法。
有什么建议么?我不想使用任何新的库。
Use
URLDecoder.decode(proxyRequestParam.replace("+", "%2B"), "UTF-8")
.replace("%2B", "+")
模拟decodeURIComponent
。爪哇的URLDecoder
将加号解码为空格,这不是您想要的,因此您需要替换语句。
Warning: the .replace("%2B", "+")
在最后will损坏你的数据if正如@xehpuk 指出的那样,原始文件(x-www-form-urlencoded 之前)包含该字符串。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)