我的查询参数中有一个哈希键,其中包含+ char和其他特殊字符。问题是当这个URL被解码时,URLDecoder会将+ char转换为空格。 有没有办法可以强制URLDecoder不要将'+'转换为空格。
答案 0 :(得分:4)
根据HTML URL Encoding Reference:
网址不能包含空格。 URL编码通常用加号(+)或%20替换空格。
和+
符号本身必须使用%2B
进行编码。因此,如果要将哈希值作为GET参数传递给URL,则应在哈希中用%2B
替换加号。不要替换整个URL中的每个+
,因为您可能会破坏其他假设包含空格的字符串参数。
答案 1 :(得分:3)
在解码前对你的字符串执行此操作:
yourString.replaceAll("\\+", "%2b")
然后,解码器将显示+
应该在哪里
答案 2 :(得分:0)
有一个类似于这个问题的错误参考,它被关闭为“不是问题”。我在这里引用受让人所说的话:
<块引用>https://docs.oracle.com/javase/8/docs/api/java/net/URL.html 处的 Java API 文档明确指出“也可以使用 URLEncoder 和 URLDecoder 类,但仅用于 HTML 表单编码,这与 RFC2396 中定义的编码方案不同。” .这意味着它不适用于 URL 编码,并且会导致路径中出现空格和加号问题。 使用 URL 或 URI 类来构造 url 将得到预期的结果。
URL url = new URL(input);
System.out.println(url.toString()); //outputs http://www.example.com/some+thing