URLDecoder.decode无法按预期工作

时间:2015-03-17 17:57:57

标签: java javascript maven spring-mvc encoding

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

一切都在运行,除了带有特殊字符的字符串ex“test + 123”。

我使用编码/解码修复此问题以尝试解决此错误。我正在使用JavaScript encodeURIComponent()(http://www.w3schools.com/jsref/jsref_encodeuricomponent.asp)和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”);)

我只是使用 javascript编码进行了测试,它将我的字符串“test + 123”转换为可以产生大量正确结果的内容。

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

Ex“test + 123”: 没有编码javascript - > “测试123”

使用javascript编码 - > “测试+ 123”

使用Java解码 - >没结果?

我的Javascript代码如下所示:

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

我的Java代码如下:

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

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

发生了什么事?

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

2 个答案:

答案 0 :(得分:0)

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

String result = URLDecoder.decode(encodedSearchString,“UTF-8”);

答案 1 :(得分:0)

解决方案:

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

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

从上面链接引用 " urlDecode默认为true,从Spring 2.5开始。如果您希望比较编码路径,请将此标志设置为false。但是,HttpServletRequest始终以解码形式公开Servlet路径。请注意,与编码路径相比,Servlet路径不匹配。"

基本上有一些东西没有明显的编码。因此,不需要解码消息串。