Ajax的POST方法中文乱码问题解决

    技术2022-05-11  140

    中文乱码真的一个头疼的问题!这个项目我尝试用AJAX去做部分开发,这个问题让我头疼了俩次,在先前开发中我们用了tomcat做为服务器开发,乱码还好解决。但最后项目组采用jboss时简直让我郁闷死了,还好网上找了半天,终于解决了,非常感谢网上的牛人!!现转给大家。

        我的开发环境:XP, eclipse,使用GB2312 编码 。  当遇到这个问题时,到网上去查了好多文章,提到几种 解决方案 ,如: 全站 UTF-8编码;请求头编码为中文;使用javascript中的escape;  今天把问题解决了,很简单,是使用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=wallimn@sohu.com&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="提交" οnclick="justdo()"/>   </body></html>/  ajax请求处理页面(act.jsp)的内容如下:这个文件可以是.java格式!/<%@ 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()就可解出原始的正确的信息。 


    最新回复(0)