URLDecoder.decode 未按预期工作

URLDecoder.decode not working as expected

我正在尝试将搜索字符串从 java 脚本前端传递到访问另一个 api 的 java 控制器。

一切都是 运行 除了带有特殊字符的字符串 ex "test+123".

我使用编码/解码解决了这个问题,试图解决这个错误。我正在使用 JavaScript encodeURIComponent() (http://www.w3schools.com/jsref/jsref_encodeuricomponent.asp) , and Java URLDecoder (http://download.java.net/jdk7/archive/b123/docs/api/java/net/URLDecoder.html#decode(java.lang.String,%20java.lang.String))

的组合

另外我看了这个: Java - URLDecoder.decode(String s) vs URLDecoder.decode(String s, String enc)

他们使用 "utf8" (UrlDecoder.decode(string,"utf8");)

我只使用 进行了测试,只是 java 脚本编码 将我的字符串 "test+123" 变成了可以得出一堆正确结果的东西。

我的记录器指出正在搜索正确的搜索字符串。

例如"test+123": 没有编码 javascript -> "test 123"

使用 java 脚本编码 -> "test+123"

使用 Java 解码 -> 没有结果?

我的 Java 脚本代码如下所示:

var encodedString=encodeURIComponent($("#search-input").val());

我的 Java 代码如下:

String result = URLDecoder.decode(encodedSearchString,"utf8");

我检查了调试器,我的记录器是正确的,encodedSearchString 没有编码。

怎么回事?

我没有编写任何其他与编码或解码相关的代码,我没有在代码的其他任何地方看到这种情况。如果重要的话,我正在使用 spring mvc、maven 和 intellj

也许语法必须是 UTF-8 而不是 utf8?

字符串结果 = URLDecoder.decode(encodedSearchString,"UTF-8");

解决方案:

没有返回正确结果的有趣原因是技术堆栈本身。

Spring MVC 包含它自己的自动打开的解码器(必须手动关闭)参见 http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html

引自上文link "urlDecode Defaults to true, as of Spring 2.5. If you prefer to compare encoded paths, set this flag to false. However, the HttpServletRequest always exposes the Servlet path in decoded form. Be aware that the Servlet path will not match when compared with encoded paths."

本质上有一些东西没有被明显编码。因此不需要对消息字符串进行解码。