AJAX的中文乱码问题

/***********本人原创,欢迎转载,转载请保留本人信息*************/
作者:wallimn
电邮:[email protected]
博客:http://blog.csdn.net/wallimn
时间:2006-11-15
/***********本人原创,欢迎转载,转载请保留本人信息*************/

  今天终于解决了AJAX的中文乱码问题,写篇文章来帮助一下有同样问题的朋友们。我的开发环境:XP, eclipse,使用GB18030编码。
  当遇到这个问题时,到网上去查了好多文章,提到几种解决方案,如:全站UTF-8编码;请求头编码为中文;使用JavaScript中的escape函数。
  使用GET方式提交数据的时候,中文问题很好解决,setrequestheader("Content-Type","text/html; encoding=gb18030")就可以了。但这个方法在POST方式中却不起作用。大家都知道GET方式提交数据有长度限制,有时我们必须使用POST方式来提交数据。
  但对于POST方式,使用上述的几种方法经过多次测试,问题依旧。我郁闷了好几天。
  今天把问题解决了,很简单,是使用escape(或encodeURI,两个函数javascript的函数,功能基本相同,可以查一下相关的帮助),但要使用两次,这是解决问题的关键。
  我的例子涉及两个页面,一个是初始页面,一个是AJAX请求处理页面。
  初始页面内容如下(hello.jsp):
/////////////////////////////////////////////////////////////////////////////////////
<%@ page language="Java" import="java.util.*" pageEncoding="GB18030"%>
<%String path = request.getContextPath();%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>AJAX提交页面</title>
 <meta http-equiv="Content-Type" content="text/html; charset=GB18030">
   <script type="text/javascript">
    function justdo(){
  var post="name=张三丰&[email protected]&bokee=http://wallimn.bokee.com";
  post = encodeURI(post);
  post = encodeURI(post);//两次,很关键
  var xmlObj = new ActiveXObject(‘Msxml2.XMLHTTP‘);
  var URL = ‘<%= path%>/page/act.jsp‘;//文件名需要调整成测试时的相应位置?
  xmlObj.open (‘post‘,URL,true);
  xmlObj.setrequestheader("cache-control","no-cache"); 
  xmlObj.setrequestheader("Content-Type","application/x-www-form-urlencoded");
  xmlObj.send (post);//注意:POST方式,使用这个来发送内容?
   }
   </script> 
  </head>  
  <body>
  <input type="button" value="提交" onclick="justdo()"/>
   </body>
</html>
/////////////////////////////////////////////////////////////////////////////////////
  ajax请求处理页面(act.jsp)的内容如下:
/////////////////////////////////////////////////////////////////////////////////////
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<%String path = request.getContextPath();%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<%@page import="java.NET.URLDecoder"%>
<html>
  <head>
    <title>ajax deal</title>
 <meta http-equiv="pragma" content="no-cache">
 <meta http-equiv="cache-control" content="no-cache">
 <meta http-equiv="expires" content="0">    
  </head>
  <body>
  <%
  //遍历输出参数内容。
  for (Enumeration e = request.getParameterNames(); e.hasMoreElements();) {
   String h = (String) e.nextElement();
   String v = request.getParameter(h);
   String mm =  java.Net.URLDecoder.decode(v, "UTF-8");
   System.out.println("请求参数: " + h + " = " + mm);
  }
   %>
  </body>
</html>
/////////////////////////////////////////////////////////////////////////////////////
  分析:当调用request.getParameter()函数时,会自动进行一次URI的解码过程,调用时内置的解码过程会导致乱码出现。而URI编码两次后,request.getParameter()函数得到的是原信息URI编码一次的内容。再用可控的解码函数java.net.URLDecoder.decode()就可解出原始的正确的信息。
  以上分析纯属个人看法,不知是否正确。

时间: 2024-10-01 11:03:40

AJAX的中文乱码问题的相关文章

SpringMVC中使用@ResponseBody注解返回值,Ajax取得中文乱码解决方法

Spring使用AnnotationMethodHandlerAdapter的handleResponseBody方法, AnnotationMethodHandlerAdapter使用request header中"Accept"的值和messageConverter支持的MediaType进行匹配,然后会用"Accept"的第一个值写入 response的"Content-Type".一般的请求都是通过浏览器进行的,request heade

JQuery AJAX提交中文乱码的解决方案

?JQuery是一个非常优秀的框架,在特定场合下使用JQuery提交数据,相当的方便快捷. 但是,在处理一个GB2312编码的网站AJAX提交时,中文数据却成了乱码. 现象如下: 1)在Firefox下,处理页面的编码为gb2312,提交数据没有问题,中文能够正确解析: 2)在IE8下,处理页面的编码为gb2312,提交中文数据出现乱码. 无论是$.post还是$.ajax,抑或$.ajaxSubmit(来自于Form插件),在之前的UTF-8编码的网站都没有出现过任何问题, 看来是由于提交数据

ajax传输中文乱码解决方法

问题描述: 我是在一个jsp页面有一个保存按钮,点击时会触发saveForm()的js函数,在saveForm()函数里经过校验后,会通过ajax发送数据请求,这样就不用通过提交表单来传输数据了,ajax估计就是这样的好处吧,目前对ajax还不太熟悉. ajax传输乱码时的代码: 1 function saveForm(){ 2 if(document.theformadd.onsubmit()){ 3 disableAllBtn(true); 4 j$.ajax({ 5 type:"get&q

ajax出现中文乱码问题

很多朋友开发web项目的时候,可能会遇到ajax传数据到后台出现中文乱码的问题,中文乱码一直是很头疼的一件事,这里记录一下本人自己遇到的一个情况,只要加多一句:contentType:'application/x-www-form-urlencoded;charset=UTF-8',即可(加了这句本人自己的是正常的,如果朋友们还会乱码,欢迎大家互相交流) 代码示例: $.ajax({ url:'xxxx', type:'post', contentType:'application/x-www-

未封装的Ajax与中文乱码问题

Ajax对象属性和方法: abort()--取消请求 getAllResponseHeaders()--获取响应的所有HTTP头 getResponseHeader()--获取指定的HTTP头 open(method,url)--创建请求,method为请求类型GET/POST send()--发送请求 setRequestHeader()--指定请求的HTTP onreadystatechange--发生任何状态变化时的事件控制对象 readyState--请求的状态:(1) 0-尚未初始化;

ajax返回中文乱码问题

ajax返回值中如果有中文,会出现乱码,解决方案: @RequestMapping(value="/release", method=RequestMethod.POST) public @ResponseBody ResponseEntity<String> release(Comment comment, @RequestParam("userId") String userId){ commentService.publish(comment,us

Jquery Mobile Ajax 提交 中文乱码问题

几百个字段都是中文名,Ajax提交时,参数名也是中文,传值接收一直乱码, 于是乎: 前端:encodeURIComponent(encodeURIComponent(参数)) 后台:URLDecoder.decode(s,"utf-8") 终于解决了乱码问题...

jquery使用ajax提交中文乱码问题的解决

$.ajax({       type : 'get',       cache : false,      url : 'custact.php',       data : {act: 'update', inputName: name, inputSex: sex, inputCardNo: cardNo, inputAddr: addr, inputCardId: cardId},       contentType : "application/x-www-form-urlencode

用jquery的ajax传中文乱码

contentType: 'application/x-www-form-urlencoded; charset=UTF-8', $.ajax({ type: 'POST', url: url, contentType: 'application/x-www-form-urlencoded; charset=UTF-8', data: { stkey:"中文" }, success:function(result){ }, error:function () { } });