我正在尝试将搜索字符串从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 。
答案 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路径不匹配。"
基本上有一些东西没有明显的编码。因此,不需要解码消息串。