/***********本人原创,欢迎转载,转载请保留本人信息*************/
作者: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()就可解出原始的正确的信息。
以上分析纯属个人看法,不知是否正确。
相关推荐
在使用Ajax进行POST提交时,中文字符可能会遇到乱码问题,这是因为数据在传输过程中编码与解码不匹配导致的。Ajax以UTF-8编码发送数据,但服务器端可能使用了不同的字符集(如GB2312)来解析,这就产生了乱码。本文...
在本文中,我们将深入探讨如何解决使用Ajax进行POST请求时出现的中文乱码问题。首先,我们要理解Ajax中文乱码的根源,它通常涉及到字符编码的不一致,尤其是在客户端与服务器之间的通信过程中。 Ajax(Asynchronous...
本文将详细探讨如何有效地解决JSP页面中的中文乱码问题,并提供具体的解决方案。 #### 一、了解中文乱码的原因 中文乱码主要是因为编码不一致导致的。例如,当浏览器发送请求时使用了一种字符集(如GBK),而...
为了解决AJAX请求中中文乱码的问题,可以通过以下两种方式来进行: 1. **在服务器端设置正确的字符集**: - **PHP**:可以使用`header()`函数来设置响应头中的字符集,例如: ```php header('Content-Type: text...
在实际应用中,我们常常会遇到Ajax与服务器交互时出现中文乱码的问题,尤其是在发送和接收中文数据时。这个问题主要涉及到字符编码的处理,解决起来需要对HTTP协议、字符编码原理以及Struts框架的工作机制有一定的...
AJAX(Asynchronous JavaScript and XML)是一种在Web开发中用于实现异步数据交换的技术,但是在使用AJAX进行POST操作时,遇到中文乱码的问题是一种常见的现象。这种问题的出现是由于AJAX在处理服务器返回的响应时,...
总的来说,解决Ajax乱码问题的关键在于理解字符编码的工作原理,确保数据在整个传输过程中的编码与解码一致性,以及正确设置服务器和客户端的编码设置。在实际应用中,还应考虑跨平台和跨浏览器的兼容性,以确保解决...
本文将深入探讨如何解决在IE浏览器下使用JQuery的Ajax POST提交时出现的中文乱码问题。 首先,我们需要理解问题的背景。在JQuery的Ajax POST请求中,当尝试向服务器发送包含中文字符的数据时,这些数据在Firefox和...
当使用Ajax GET请求返回页面时,响应文本(RESPONSETEXT)中的中文乱码通常是因为XMLHttpRequest对象按照UTF-8解码了服务器返回的非UTF-8编码的响应体。为解决此问题,服务器需要在响应头中明确指定编码类型,例如在...
**Ajax中文乱码问题详解与解决方案** 在开发Web应用程序时,尤其是在处理中文字符时,Ajax中文乱码问题是一个常见的困扰。这是因为不同的系统、浏览器、服务器和文件可能使用不同的字符编码,导致数据在传输过程中...
AJAX中文问题分为两大类: 1)发送路径中的参数有中文,在服务器段接收参数值是乱码 例如: var url=”a.jsp?name=小李”; xmlHTTP.open (“post”,url,true); 解决办法: 利用javascript的提供的escape()或...
总的来说,解决JSP乱码问题和正确使用AJAX传递中文参数,关键在于理解编码和解码的过程,以及在不同环境下的适应性调整。通过适当的过滤器配置、参数转换和统一的编码标准,可以有效地防止和解决这些问题。在实际...
- 使用POST请求而非GET,因为POST请求的数据不在URI中,不会受到浏览器URI编码限制,乱码问题相对较少。 - 如果可能,尽量使用标准的UTF-8编码,因为UTF-8是更广泛支持的国际化编码标准。 总结来说,解决Ajax URI...
在开发过程中,Ajax(异步JavaScript和XML)技术常常用于实现网页的无刷新交互,但与之相伴的一个常见问题是中文乱码。以下是一些解决Ajax中文乱码问题的方法: 1. **请求头设置**: 当发送Ajax请求时,需要确保...
总结起来,解决AJAX的GET和POST请求中的乱码问题主要涉及两方面:一是服务器端设置正确的响应字符编码,二是客户端确保请求数据的编码和解码过程与服务器端匹配。通过上述方法,可以有效地避免在处理非ASCII字符时...
在使用jQuery的AJAX方法进行数据交互时,有时会遇到中文字符乱码的问题。这是因为浏览器、服务器和前端之间编码不一致导致的。本文将详细解释这个问题,并提供有效的解决方案。 首先,我们要理解AJAX(Asynchronous...
在Struts框架中,汉字乱码问题是一个常见的问题,特别是在处理中文输入时。解决这个问题涉及到多个层面,包括页面编码设置、服务器配置以及Struts的Servlet配置。以下是对这些问题的详细解释: 1. 页面编码设置: ...
总之,处理Ajax中的中文乱码问题,关键在于确保数据在发送、接收和处理过程中使用一致的字符编码。通过正确设置请求和响应的`Content-Type`、使用适当的编码转换函数,以及在服务器端进行相应的编码调整,可以有效地...
总结以上所述,要解决JQuery发送ajax请求时出现的中文乱码问题,需要从两个方面着手:确保Web项目的web.xml配置文件中设置了正确的字符编码过滤器,以及在JSP页面中设置了正确的字符编码,并使用POST方法发送ajax...