出现问题:导出条件输入中文,后台中文变乱码,因而导出文件为空。
解决方法:1.前台JSP页面对请求参数进行两次编码,如:
var sp_name = $("#sp_name").val();
if (sp_name){
sp_name = encodeURI(encodeURI(sp_name));
}
2.后台对请求参数进行一次解码,如:
if(!"".equals(chargeRecord.getSp_name()) && chargeRecord.getSp_name()!=null){
String name=chargeRecord.getSp_name();
try {
chargeRecord.setSp_name(URLDecoder.decode(name,"UTF-8"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
为什么前台需要两次编码,而后台只需要一次解码呢?
实际上呢,前台进行两次编码,后台也是两次解码,两者过程对称,才不会出现乱码。
UTF-8编码->UTF-8(iso-8859-1)编码->iso-8859-1解码->UTF-8解码。
https://blog.csdn.net/u012027337/article/details/52126475这篇文章讲的挺好。我们可以多看看了解其原理。
还有一种情况,后台查询出来的数据返回到界面时,界面却无数据,经F12调试查看,界面表单数据存在乱码。
解决方法:
注解RequestMapping里面增加参数属性produces={"text/html;charset=UTF-8;","application/json;"},如下处理:
@RequestMapping(value = "/exportSenstiveWord.html",produces={"text/html;charset=UTF-8;","application/json;"})