`

JSP中,AJAX使用POST方式提交中文乱码问题解决

阅读更多

 

/***********本人原创,欢迎转载,转载请保留本人信息*************/
作者:wallimn
电邮:wallimn@sohu.com
博客: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=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="提交" 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()就可解出原始的正确的信息。
  以上分析纯属个人看法,不知是否正确。 

2
1
分享到:
评论

相关推荐

    Ajax使用POST提交中文乱码问题.docx

    在使用Ajax进行POST提交时,中文字符可能会遇到乱码问题,这是因为数据在传输过程中编码与解码不匹配导致的。Ajax以UTF-8编码发送数据,但服务器端可能使用了不同的字符集(如GB2312)来解析,这就产生了乱码。本文...

    ajax中文乱码如何解决

    在本文中,我们将深入探讨如何解决使用Ajax进行POST请求时出现的中文乱码问题。首先,我们要理解Ajax中文乱码的根源,它通常涉及到字符编码的不一致,尤其是在客户端与服务器之间的通信过程中。 Ajax(Asynchronous...

    JSP中文乱码问题最优解决方法

    本文将详细探讨如何有效地解决JSP页面中的中文乱码问题,并提供具体的解决方案。 #### 一、了解中文乱码的原因 中文乱码主要是因为编码不一致导致的。例如,当浏览器发送请求时使用了一种字符集(如GBK),而...

    AJAX在Post中文的时候解决乱码的方法

    为了解决AJAX请求中中文乱码的问题,可以通过以下两种方式来进行: 1. **在服务器端设置正确的字符集**: - **PHP**:可以使用`header()`函数来设置响应头中的字符集,例如: ```php header('Content-Type: text...

    Struts框架下Ajax发送中文乱码问题的解决

    在实际应用中,我们常常会遇到Ajax与服务器交互时出现中文乱码的问题,尤其是在发送和接收中文数据时。这个问题主要涉及到字符编码的处理,解决起来需要对HTTP协议、字符编码原理以及Struts框架的工作机制有一定的...

    AJAX在Post中文的时候乱码的解决方法

    AJAX(Asynchronous JavaScript and XML)是一种在Web开发中用于实现异步数据交换的技术,但是在使用AJAX进行POST操作时,遇到中文乱码的问题是一种常见的现象。这种问题的出现是由于AJAX在处理服务器返回的响应时,...

    ajax乱码解决方案

    总的来说,解决Ajax乱码问题的关键在于理解字符编码的工作原理,确保数据在整个传输过程中的编码与解码一致性,以及正确设置服务器和客户端的编码设置。在实际应用中,还应考虑跨平台和跨浏览器的兼容性,以确保解决...

    JQuery中Ajax的Post提交在IE下中文乱码的解决方法

    本文将深入探讨如何解决在IE浏览器下使用JQuery的Ajax POST提交时出现的中文乱码问题。 首先,我们需要理解问题的背景。在JQuery的Ajax POST请求中,当尝试向服务器发送包含中文字符的数据时,这些数据在Firefox和...

    ajax乱码解决汇总

    当使用Ajax GET请求返回页面时,响应文本(RESPONSETEXT)中的中文乱码通常是因为XMLHttpRequest对象按照UTF-8解码了服务器返回的非UTF-8编码的响应体。为解决此问题,服务器需要在响应头中明确指定编码类型,例如在...

    ajax中文乱码问题解决方案

    **Ajax中文乱码问题详解与解决方案** 在开发Web应用程序时,尤其是在处理中文字符时,Ajax中文乱码问题是一个常见的困扰。这是因为不同的系统、浏览器、服务器和文件可能使用不同的字符编码,导致数据在传输过程中...

    AJAX中文乱码问题探讨及解决

    AJAX中文问题分为两大类: 1)发送路径中的参数有中文,在服务器段接收参数值是乱码 例如: var url=”a.jsp?name=小李”; xmlHTTP.open (“post”,url,true); 解决办法: 利用javascript的提供的escape()或...

    JSP乱码终极攻略和AJAX初步运用

    总的来说,解决JSP乱码问题和正确使用AJAX传递中文参数,关键在于理解编码和解码的过程,以及在不同环境下的适应性调整。通过适当的过滤器配置、参数转换和统一的编码标准,可以有效地防止和解决这些问题。在实际...

    Ajax uri 乱码问题总结

    - 使用POST请求而非GET,因为POST请求的数据不在URI中,不会受到浏览器URI编码限制,乱码问题相对较少。 - 如果可能,尽量使用标准的UTF-8编码,因为UTF-8是更广泛支持的国际化编码标准。 总结来说,解决Ajax URI...

    ajax中文乱码的各种解决办法总结.docx

    在开发过程中,Ajax(异步JavaScript和XML)技术常常用于实现网页的无刷新交互,但与之相伴的一个常见问题是中文乱码。以下是一些解决Ajax中文乱码问题的方法: 1. **请求头设置**: 当发送Ajax请求时,需要确保...

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

    在使用jQuery的AJAX方法进行数据交互时,有时会遇到中文字符乱码的问题。这是因为浏览器、服务器和前端之间编码不一致导致的。本文将详细解释这个问题,并提供有效的解决方案。 首先,我们要理解AJAX(Asynchronous...

    struts下的汉字乱码问题

    在Struts框架中,汉字乱码问题是一个常见的问题,特别是在处理中文输入时。解决这个问题涉及到多个层面,包括页面编码设置、服务器配置以及Struts的Servlet配置。以下是对这些问题的详细解释: 1. 页面编码设置: ...

    ajax中文乱码的各种解决办法总结

    总之,处理Ajax中的中文乱码问题,关键在于确保数据在发送、接收和处理过程中使用一致的字符编码。通过正确设置请求和响应的`Content-Type`、使用适当的编码转换函数,以及在服务器端进行相应的编码调整,可以有效地...

    JQuery发送ajax请求时中文乱码问题解决

    总结以上所述,要解决JQuery发送ajax请求时出现的中文乱码问题,需要从两个方面着手:确保Web项目的web.xml配置文件中设置了正确的字符编码过滤器,以及在JSP页面中设置了正确的字符编码,并使用POST方法发送ajax...

    php+AJAX传送中文会导致乱码的问题的解决方法

    当使用AJAX的GET方式获取服务器响应时,`ResponseText`中的中文字符可能出现乱码。这是因为XMLHttpRequest默认将返回的响应体按照UTF-8解码。如果服务器返回的数据实际上是GBK或其他编码,就会出现乱码。 解决此...

Global site tag (gtag.js) - Google Analytics