jQuery中文乱码处理总结:
1. 最简单的方式,是将项目的编码统一设置为UTF-8. 将数据交互时的编码都统一为"UTF-8";
其实中文乱码就是因为contentType没有指定编码,只需在jQuery.js中搜索
’contentType’
然后在application/x-www-form-urlencoded后面加上
; charset=UTF-8
最终变成
contentType:"application/x-www-form-urlencoded; charset=UTF-8"
2. 如果项目的编码已经统一设置为GBK或GB2312,则在ajax调用向服务端传递中文参数时容易出现中文乱码, 这时的处理方式如下: 后台如: /* =============禁止缓存============== */ response.setHeader("Pragma", "no-cache"); response.setHeader("Cache-Control", "no-cache"); response.setHeader("Expires", "0"); /* =============禁止缓存============== */ response.setContentType("text/html;charset=UTF-8"); response.setCharacterEncoding("UTF-8"); //request.setCharacterEncoding("UTF-8"); String userName = request.getParameter("userName"); userName=URLDecoder.decode(userName, "UTF-8"); //在springmvc中,如没有通过request,或直接设置jquery的编码设置,则需要如下方式转换。 // mykeyword = new String(keyword.getBytes("iso-8859-1"),"UTF-8"); //但如果是encodeURI()函数转换,则如下就可以。注意,这时参数在 url后面。 userName=URLDecoder.decode(userName, "UTF-8"); 前台如: var myurl="grzx/validateUserNameIsExists.do?userName="+username; myurl=encodeURI(myurl); myurl=encodeURI(myurl); jQuery.ajax({ url:myurl, type:'POST', async:false, data:{}, success:function(data){ var msg=eval('('+data+')'); // var msg=JSON.parse(data); if(!msg.result){ jQuery('#myusername').attr('value',''); alert('用户名已存在!请用新的用户名'); } } }); 进行两次编码。 在前台传递的“哈哈大笑”,在后台编码前为:“%E5%93%88%E5%93%88%E5%A4%A7%E7%AC%91”;就算成功了。 当然也可以只进行一次编码,方式是将jquery的编码设置为"UTF-8"; 加上;charset='UTF-8'就好了。如:
Java代码
- 在jsp端
- //用post方法提交,客户端需编码数据,data : encodeURI(spost),
- //var spost="commentContent="+commentContent+"&contentId="+contentId;
- //spost = encodeURI(spost);
- 在action端
- //用psot方法取值,客户端需编码,服务器端需解码
- //String ii = request.getParameter("commentContent");
- //ii = java.net.URLDecoder.decode(ii,"utf-8");
-
- 2、用get方式
- jsp端
- type:'GET',不需要处理
- action端
- String commentContent = new String((request.getParameter("commentContent")).getBytes("ISO-8859-1"),"UT简单的记录一下
评论