您的位置:首页 > 编程语言 > Java开发

关于java web项目中文乱码问题

2014-05-20 15:02 465 查看
在开发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")
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: