itVincent Blog - Java Working Fun!

技术引领时代!
posts - 117, comments - 181, trackbacks - 0, articles - 12

Ajax中文乱码问题及解决方法

Posted on 2009-03-16 16:06 itVincent 阅读(1484) 评论(4)  编辑  收藏 所属分类: Ajax
场景:

使用jQuery的ajax方法提交ajax请求,代码如下:
1$.ajax({
2    dataType : 'json'
3    ,type : 'POST'
4    ,url : 'http://localhost/test/test.do'
5    ,data : {id: 1, type: '商品'}
6    ,success : function(data){
7        
8    }

9}
);

问题:

提交后后台action程序时,取到的type是乱码

解决方法:

方法一:提交前采用encodeURI两次编码,记住一定是两次
1.修改以下代码
data:{id:1, type:encodeURI(encodeURI('商品'))}
2.在后台action里要对取得的字符串进行decode
1String type = request.getParameter("type");
2type = URLDecoder.decode(type, "UTF-8");

方法二:ajax配置contentType属性,加上charset=UTF-8
在ajax方法中加入以下参数
1contentType: "application/x-www-form-urlencoded; charset=UTF-8"
使用其它js框架或者xhr都是差不多,设置header中contentType即可,
这里关键是charset=UTF-8,如果没有这个,是不行的,默认jQuery里的contentType是没有的.
还补充一下jQuery里对参数已经进行了一次encodeURIComponent的处理

*方法二在action里不需要进行decode,所以推荐使用此方法


Feedback

# re: Ajax中文乱码问题及解决方法  回复  更多评论   

2009-03-16 17:17 by wang.senyuan
方法一为什么要两次?

# re: Ajax中文乱码问题及解决方法  回复  更多评论   

2009-03-16 17:43 by itVincent
@wang.senyuan
必须要两次,不然decode了之后还是乱码

# re: Ajax中文乱码问题及解决方法  回复  更多评论   

2009-03-16 17:44 by 逝水fox
用两次的原因是 因为getParameter的时候Java自己会解析一层编码 如果原文是中文 你提交的时候只做了一层编码的话 Java自动解析可能会因为两边使用的编码不一致而造成乱码
编码两次就没有问题了 因为第一次编码的结果不会有中文这些可能导致出错的符号

不过这样做 记的"+"符号这样传会有问题

# re: Ajax中文乱码问题及解决方法  回复  更多评论   

2009-03-17 00:00 by stevenhong
对于无状态的web来说,哪有不传contentType的道理....

只有注册用户登录后才能发表评论。


网站导航: