重定向传参中文乱码问题
最近项目上遇到通过重定向请求url中参数为中文乱码问题,记录解决方法。
jsp 代码如下
var bak0Ser = $("#bak0Ser").val();
document.forms[0].action = "/BwinPM/project/supplierPersonnel/supplierPersonnelStationLocal.do?stationLocalId="+depId+"&stationNumberSer="+stationNumberSer+"&bak0Ser="+bak0Ser;
<input id="stationNumberSer" type="hidden" name="stationNumberSer" value="${stationNumberSer}">
<input id="bak0Ser" type="hidden" name="bak0Ser" value="${bak0Ser}">
java代码如下
request.setAttribute("stationNumberSer", stationNumberSer);
request.setAttribute("bak0Ser", bak0Ser);
String url = "redirect:supplierPersonnelStationCheck.do?timestamp=" + System.currentTimeMillis();
if (null != parm && !"".equals(parm)) {
url += "&parm=" + parm;
}
if (null != stationNumberSer && !"".equals(stationNumberSer)) {
url += "&stationNumberSer=" + stationNumberSer;
}
if (null != bak0Ser && !"".equals(bak0Ser)) {
url += "&bak0Ser=" + bak0Ser;
}
return url;
}
controller层通过request.setAttribute()设置参数 jsp页面将参数放置隐藏域内,通过jq读取参数,通过alert发现参数读取正常,controller层request.getParameter()获取参数同样正常,debug发现,参数通过重定向传参之后显示乱码。
解决方法:
bak0Ser = URLEncoder.encode(bak0Ser, “utf-8”); 传参之前将中文参数编码
接受端正常通过request.getParameter();获取参数即可。
request.getParameter中文乱码问题
jsp通过post方法表单提交
url参数中带中文,后台通过request.getParameter()方法获取参数出现中文乱码问题 解决方法如下:
- Apache版本问题,不同版本的Apache关于编码的方式可能不同(配置文件有关于编码格式的配置),乱码时Apache的版本为7.0,更新到8.5之后问题解决。
String bak0Ser = new String(request.getParameter("bak0Ser").getBytes("iso-8859-1"), "utf-8");
通过getBytes方法浏览器的编码格式为 iso-8859-1,转换成 utf-8
这两种方式都可以解决乱码问题,推荐第一种,不然以后关于乱码问题可能都需要加代码,不利于代码维护。