前段时间写JSP,使用AJAX以POST方式提交数据,如果是中文字符提交就会乱码,后来写ASP时用到AJAX以POST方式提交数据,中文一样是乱码。搜索一下相关资料,问题应该是提交数据时是以UTF-8编码提交,所以接收时如果使用GB2312或者其它中文编码的话就会乱码。
使用GET方式提交数据的时候,中文问题很好解决,setRequestHeader("Content-Type","text/html; encoding=gb18030")就可以了。但这个方法在POST方式中却不起作用。大家都知道GET方式提交数据有长度限制,有时我们必须使用 POST方式来提交数据。
对于使用POST,JSP的解决方法如下:
使用escape(或encodeURI,两个函数都是JavaScript的函数,功能基本相同,可以查一下相关的帮助),但要使用两次,这个是关键。
初始页面内容如下(hello.jsp):
Java代码 收藏代码
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<!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 = "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)的内容如下:
Java代码 收藏代码
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<!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()就可解出原始的正确的信息。
分享到:
相关推荐
在IT领域,尤其是在Web开发中,处理中文字符时经常遇到的一个问题是中文乱码。这个问题尤其在使用Ajax进行异步数据提交时更为突出。Ajax(Asynchronous JavaScript and XML)是一种在无需重新加载整个网页的情况下,...
2. **POST请求中的中文乱码**: POST请求中,数据通常放在请求体中。Java的HttpURLConnection或HttpClient类都可以处理POST请求。在使用HttpURLConnection时,需要设置请求头`Content-Type`为`application/x-...
引言: 在JQuery的Ajax POST请求中,进行请求,其中的中文在后台,显示为乱码,该如何解决呢? 问题的引入: 代码如下: var regid = $(‘#oregion’).combobox(‘getValue’); //var sname = $(‘#sname’).val(); ...
C++post请求的时候中文参数,导致传到服务器乱码,这种异常的处理。也就是如何解决POST中文参数 解释可以参考https://blog.csdn.net/gemo/article/details/8468311 这里提供成功代码
"3,indy10.6D7下Get&Post中文乱码解决.txt"是针对D7环境下Indy10.6 GET和POST请求中文乱码问题的解决方案。这个问题通常由字符编码不一致导致,例如服务器和客户端之间没有统一的编码标准,或者在转换过程中没有...
总结来说,处理JQuery Ajax POST中文乱码问题,主要有两个策略: 1. 对于前端JavaScript中的参数,可以使用`escape()`函数进行编码,然后在服务器端接收后解码,但通常这不是必需的,因为大多数现代浏览器和服务器...
在开发过程中,尤其是在使用C#与ASP.NET进行Web开发时,经常会遇到客户端通过Ajax向服务器端发送Post请求后,服务器端接收到的数据出现乱码的问题。这种情况不仅影响用户体验,也可能会导致程序逻辑出现问题。本文将...
本文将详细阐述GET和POST请求中文乱码的处理方式,以帮助开发者解决这类问题。 首先,我们需要了解为什么会出现中文乱码。在HTTP请求中,数据通常是按照ASCII编码进行传输的,而中文字符通常使用UTF-8或其他多字节...
TIdTCPClient中文乱码问题 我在进行indy10.5.7这个版本进行idTCPClient及idTCPServer进行编程时同样汉字收发时会产生乱码,我在单元的里引用了 HTTPApp 单元, 在发的时候这样写IdTCPClient.IOHandler.WriteLn...
标题中的“ASP.NET中Request.Form中文乱码的解决方法”直指一个常见的编程难题:当用户通过表单提交包含中文字符的数据时,服务器端接收到的数据可能会出现乱码。这种情况通常发生在不同的网页编码格式之间交互时,...
### extjs前后台交互参数出现中文乱码问题的解决方法 #### 问题背景与原因分析 在使用MyEclipse开发工具进行Web应用开发时,尤其是采用ExtJS框架结合Ajax技术进行前后端数据交互的过程中,可能会遇到一个常见的...
以下是关于解决jquery向.ashx文件post中文乱码问题的详细知识点。 首先,从环境中可以看到,开发者使用的是Visual Studio 2005,并且由于未安装SP1补丁,无法创建Web应用程序,因此只能创建网站。使用的jquery版本...
5. **批处理文件处理**:提供的资源中包含了批处理文件(post模拟提交文件中文乱码的问题处理.bat),这可能是一个解决此问题的示例脚本。批处理文件可以用来自动化上述的一些步骤,比如预先处理文件名和数据编码。 ...
本主题聚焦于"boa服务器get/post请求中文乱码问题",并提及了sqlite3数据库处理中文乱码的情况。以下将详细介绍这两个方面的知识点。 1. Boa服务器与HTTP请求中文乱码: Boa服务器是一个轻量级的Web服务器,适用于...
post 方法传参乱码是由于服务器是不解析的,请求体是直接封装在 request 对象里面的。解决方法是设置 request 的编码,可以改变 post 参数的编码。 三、解决方法 1. 设置页面编码 设置页面编码为 utf-8,以便正确...
在开发Java Web应用时,JSP中文乱码是一个常见问题,主要是由于字符编码不一致导致的。以下是针对这个问题的详细解析和解决方案: 1. **JSP页面编码不一致**: - JSP页面中,编码设置通常包含在两处:`...
跟大家一样遇到了中文字符集乱码问题,为了大家能少走一些弯路,所以在此分享一下即简单又实用的解决方法。 1. POST 数据传递 接收页 代码如下: <%@ page language=”java” import=”java.util.*” ...
两者的主要区别在于,`$.get()`通常用于查询操作,其数据以URL参数的形式传递,而`$.post()`则用于提交数据,适合更新操作。`$.get()`方式的数据量有限且可能被缓存,安全性较低,而`$.post()`方式则能传输更多数据...