JSP页面,将form表单所有参数序列化,作为jqgrid表格的url参数进行查询,其中传入的有中文参数:
var param = $("#form1").serialize();
var url = "findWhiteListByCondition.action?" + param;
$("#gridTable").jqGrid({
url: url,
datatype: "json",
……
结果显示Action收到的变量值,中文已经变成乱码。无法进行模糊查询。
然后上网百度,从以下这个帖子找到了灵感:
中文乱码在java中URLEncoder.encode方法要调用两次解决 http://blog.youkuaiyun.com/kongqz/article/details/9028111
里面说,因为在jsp中对中文进行编码的时候用的是UTF-8的编码方式,而在servlet中调用request.getParameter()方法之前会
自动使用服务器指定的编码格式做一次解码的工作(默认的ISO-8859-1)。两种方式不同,导致出现乱码。
于是想到,按照这个过程,进行逆向处理,先进行ISO-8859-1编码,再进行UTF-8解码:
String name = java.net.URLEncoder.encode(orgShortName, "ISO-8859-1");;
System.out.println("编码后:" + name);
name = java.net.URLDecoder.decode(name, "UTF-8");
System.out.println("解码后:" + name);
测试结果,JSP输入值为:嘉兴
JAVA执行得到:
编码后:%E5%98%89%E5%85%B4
解码后:嘉兴
成功变回来了!!!!