在开发java web项目时候,存在三种方式与后台交互:
1、form表单提交
2、window.location.href 跳转(这种方式与第一种类似)
3、异步交互
在于后台的交互过程中免不了需要传输中文,前台界面输入中文,后台获取响应参数时候很容易出现中文乱码问题。
下面说明下不同交互方式解决中文乱码的方式,本文java web项目编码以UTF-8为例:
首先,页面的编码方式肯定是要指定的,在jsp中指定界面的编码方式:
<%@ page contentType="text/html; charset=UTF-8"%>
<html>下的<head>标签下加上:<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
即使指定了页面的编码方式,在后台获取参数的时候仍会遇到中文乱码问题
其次,js中不同的请求方式,处理中文乱码方式不同:
1、window.location.href 跳转
在js方法中以window.location.href 的方式访问action,请求如下,参数goodsName为中文:
window.location.href = contextRootPath + "/order/getOrderListForExport.action?startDate=" + startDate + "&endDate=" + endDate + "&goodsName" = goodsName;
后台action中以 req.getParameter("goodsName") 获取出的参数就是中文乱码
解决方案:
修改js中的请求参数 goodsName 为 encodeURI(encodeURI(goodsName)) 如下: (注意是encodeURI两次)
window.location.href = contextRootPath + "/order/getOrderListForExport.action?startDate=" + startDate + "&endDate=" + endDate + "&goodsName=" + encodeURI(encodeURI(goodsName));
后台action获取参数方式
URLDecoder.decode(req.getParameter("goodsName"), "UTF-8")
2、异步交互
此处只涉及jquery异步交互,cardholderName是中文参数
$.ajax( {
url : contextRootPath + "/payment/XXXXXXXXX.action",
type : 'get',
contentType : "text/text;charset=UTF-8",
cache: false,
data : {cardholderName:cardholderName},
success : function(resp)
{
},
error : function(xhr, status, errorThrown)
{
errorMsg("errorThrown=" + errorThrown);
}
});
后台action获取参数request.getParameter("cardholderName")也是中文乱码
解决方案:
修改js中的请求参数
data : {cardholderName:encodeURIComponent(cardholderName)},
后台action获取参数方式
URLDecoder.decode(request.getParameter("cardholderName"), "UTF-8")