本文介绍在JSP中使用JS向Action传递中文参数时产生乱码的解决方案。通过在JavaScript中对中文参数进行两次encodeURI转码,并在Action端使用java.net.URLDecoder.decode配合UTF-8编码进行解码,可有效解决中文显示异常问题。
JS向Action传递中文参数乱码问题背景
在项目开发过程中,通常只要整个项目统一采用UTF-8编码格式,从JSP表单向Action获取中文参数时便不会出现乱码。然而,当JSP页面中涉及JavaScript,并通过JS向Action传递中文参数时,往往会遇到中文乱码现象。经查阅相关资料,网上关于此问题的说法众说纷纭。
经过实际测试与验证,发现以下方法能够有效解决中文乱码问题。
JavaScript端双编码处理方案
在JSP页面的JavaScript代码中,对中文参数执行两次encodeURI转码操作,即使用encodeURI(encodeURI(中文参数))。具体示例如下。
代码如下:
function show(next,id,realName){
document.forms['f2'].action="usersearchNextPage?next="+next+"&id="+id+"&realName="+encodeURI(encodeURI(realName));
document.forms['f2'].submit();
} 其中,realName为需要传递的中文参数。因此,在构建提交URL时,需对realName进行两次转码处理,即调用encodeURI(encodeURI(realName))。
Action端解码实现
在Action端接收中文参数时,需进行解码操作。具体使用java.net.URLDecoder.decode(realName,"UTF-8")。
示例如下:
代码如下:
String realName = ServletActionContext.getRequest().getParameter("realName");
try {
realName = java.net.URLDecoder.decode(realName,"UTF-8");
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
} 经过上述处理,中文乱码问题即可得到解决。