ajax post中文乱码解记方法与实例说明

当调用request.getparameter()函数时,会自动进行一次uri的解码过程,调用时内置的解码过程会导致乱码出现。而uri 编码两次后,request.getparameter()函数得到的是原信息uri编码一次的内容。再用可控的解码函数 java.net.urldecoder.decode()就可解出原始的正确的信息

response.setheader("charset","gb2312");
看到的说明原文如下:

用ajax中采用get来读取页面时,responsetext里面的中文多半会出现乱码,这是因为xmlhttp在处理返回的responsetext的时候,resposebody默认采用utf-8编码,如果服务器送出的确实是utf-8的数据流的时候汉字会正确显示,而读取的页面编码是gbk或者gb2312时就会出现页面中文的乱码。
解决的办法有二:

1、在送出的流里面加一个header,指明送出的是具体编码流:

php教程:header('content-type:text/html;charset=gb2312');
asp教程:response.charset("gb2312")
jsp教程:response.setheader("charset","gb2312");

2、采用utf-8编码来保存html文档

看个ajax jsp乱码解决方法

ajaxpost.js
var myrequest; // variable to hold request object
function mysubmit(){
if (window.xmlhttprequest)
{
    myrequest = new xmlhttprequest(); // standards-compliant browsers
} else if (window.activexobject)
{
    myrequest = new activexobject("msxml2.xmlhttp"); // for ie
}

var post="name="+document.getelementbyid("postval").value;
post=encodeuri(post);
post=encodeuri(post); //最重要的部分,两次调用encodeuri ,就是编码两次
myrequest.open("post","servlet/display",false);
//myrequest.setrequestheader("contentlength",post.length);
myrequest.setrequestheader("content-type","application/x-www-form-urlencoded");
myrequest.send(post);
var res=myrequest.responsetext;//接收返回的数据
document.getelementbyid("display").innerhtml=res;
}

ajaxpost.jsp

<%@ page language="java" import="java.util.*" pageencoding="gb2312"%>

<!doctype html public "-//w3c//dtd html 4.01 transitional//en">
<html>
  <head>
    <title>my jsp 'ajaxpost.jsp' starting page</title>
    
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">    
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="this is my page">

<script type="text/网页特效" src="js/ajaxpost.js"></script>

  </head>
  
  <body>
     <textarea rows="10" cols="20" id=postval></textarea>
     <br>
     <input type=button onclick="mysubmit();" value="打印">
     <div id="display"></div>
  </body>
</html>

servlet

public void dopost(https教程ervletrequest request, httpservletresponse response)
   throws servletexception, ioexception {

  response.setcontenttype("text/html");
  response.setcharacterencoding("gbk");
  printwriter out = response.getwriter();
  string name=request.getparameter("name");
  name=urldecoder.decode(name,"utf8"); //post 传递的时候,一定是用utf8编码的,url 自己可以设定
  system.out.println(name);
  out.println(name);
  out.flush();
  out.close();
}

实例二

初始页面内容如下(hello.jsp):

<%@ page language="java" import="java.util.*" pageencoding="gb18030"%>
<%string path = request.getcontextpath();%>
<!doctype html public "-//www.111cn.net//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=wallimn@sohu.com&bokee=http://down.111cn.net";
  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>

/////////////////////////////////////////////////////////////////////////////////////

时间: 2024-10-02 21:16:09

ajax post中文乱码解记方法与实例说明的相关文章

springmvc 发送ajax出现中文乱码的解决方法汇总_AJAX相关

使用spingmvc,在JS里面通过ajax发送请求,并返回json格式的数据,从数据库拿出来是正确的中文格式,展示在页面上就是错误的??,研究了一下,有几种解决办法.  我使用的是sping-web-3.2.2,jar   方法一:   在@RequestMapping里面加入produces = "text/html;charset=UTF-8" @RequestMapping(value = "/configrole", method = RequestMet

wordpress安装过程中遇到中文乱码的处理方法_php实例

在安装wordpress的时候,按照里面的readme.html的步骤进行安装,但是在访问wp-admin/install.php的时候就出现了一行乱码: 复制代码 代码如下: 鎮ㄧ殑 PHP 浼间箮娌℃湁瀹夎杩愯 WordPress 蹇呴』鐨  MySQL 鎷撳睍銆 从这行乱码中可以看出有PHP.MySql,可以猜测出是连接MySql错误.在仔细检查了wp-config.php中的连接数据库参数后,发现不是参数的错误,那就一定是连接的方式出了问题. 以前我习惯于使用mysqli.dll来连

jQuery ajax方法传递中文时出现中文乱码的解决方法_jquery

本文实例讲述了jQuery ajax方法传递中文时出现中文乱码的解决方法.分享给大家供大家参考,具体如下: 使用jQuery的ajax方法,在传递中文时出现中文乱码,按照以前的方法,修改了jquery文件中的ajaxSetting也不好使 复制代码 代码如下: sajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded;charse

ajax返回中文乱码,servlet中的显示乱码,post提交的乱码问题,编码大总结

ajax|servlet|编码|问题|显示|中文|中文乱码 ajax返回中文乱码问题解决使用ajax获取服务器数据返回给客户端,出现中文乱码.在之前的一个ajax应用中指定codepage=936,将所有页面编码都指定为GB2312即可解决.这 次的应用中却无起作用了,经过多次的试验,客服端的编码应该绝对没有问题的.可以判断问题一定出在服务器端.稍微分析一下可知虽然服务器端指定了文件的编 码格式,但对于服务器输出流就成为了怀疑的对象.由于使用MS SQL2000,采用unicode编码,所以返回

Ajax传输中文乱码问题的解决办法_AJAX相关

AJAX简介 AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML). AJAX 不是新的编程语言,而是一种使用现有标准的新方法. AJAX 是与服务器交换数据并更新部分网页的艺术,在不重新加载整个页面的情况下. ajax传输中文乱码问题描述: 我是在一个jsp页面有一个保存按钮,点击时会触发saveForm()的js函数,在saveForm()函数里经过校验后,会通过ajax发送数据请求,这样就不用通过提交表单来传输数据了,aj

Ajax传输中文乱码问题的解决办法

AJAX简介 AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML). AJAX 不是新的编程语言,而是一种使用现有标准的新方法. AJAX 是与服务器交换数据并更新部分网页的艺术,在不重新加载整个页面的情况下. ajax传输中文乱码问题描述: 我是在一个jsp页面有一个保存按钮,点击时会触发saveForm()的js函数,在saveForm()函数里经过校验后,会通过ajax发送数据请求,这样就不用通过提交表单来传输数据了,aj

使用Wordpress插件时出现中文乱码的解决方法

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 用wordpress建网站的好处就在于,可以使用N多主题和N多的插件,由于wordpress在国外的使用时期较长,很多插件都是国外的用户开发的.对于中文的支持不是很好.经常使用WP一定会遇到插件编码问题,今天影子给大家讲一下关于使用wordpress插件时出现中文乱码的解决方法. 一.起因: 今天就遇到一个插件,输入中文后,保存,查看,显示输

ajax的中文乱码问题

昨天遇到了ajax的中文乱码问题,在网上google了一下,搜索的结果不少,可是都没能帮助我解决乱码的问题.我遇到的乱码问题很是怪,在有些机器上不乱码,有些就乱码.不出现乱码的机器是xp系统安装了vs2003又安装了vs2005,或者是win2003的.后来因为要做一个功能,要向配置文件里写东西.看到<globalization requestEncoding="gb2312" responseEncoding="gb2312"/>我用的gb2312的编

wordpress安装过程中遇到中文乱码的处理方法

  wordpress安装过程中遇到中文乱码的处理方法        这篇文章主要介绍了wordpress安装过程中遇到中文乱码的处理方法,是个人项目中遇到的一个奇葩事件,经过一番研究,终于解决,这里记录下来分享给大家,有需要的小伙伴可以参考下. 在安装wordpress的时候,按照里面的readme.html的步骤进行安装,但是在访问wp-admin/install.php的时候就出现了一行乱码: 复制代码 代码如下: 鎮ㄧ殑 PHP 浼间箮娌℃湁瀹夎杩愯 WordPress 蹇呴』鐨 M