Ajax GET和POST方法传参导致JSP中文乱码 字符集问题
2010-11-22 01:29
351 查看
这个中文的乱码问题让我忙活了一个下午了,终于有点眉目了,现在把解决办法贴出来,做个记录,也希望能帮助跟我有同样问题的人,hoho。
我的问题:
在一个页面上,填写表单内容,提交采用Ajax实现,并且分别用GET和POST两种方法提交,最后把表单的内容显示到当前页面上。
如:输入姓名(小三),生日(2012年1月1日)。期望结果显示“您好,小三。您的生日是2012年1月1日”。
错误的结果肯定是显示乱码,无论是GET还是POST都是乱码,然后查资料,找解决办法。
看了好多资料,看来这问题大家都遇到过,终于明白了一些字符集的相关问题。
第一种:最基本的乱码问题
Java代码
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ page contentType="text/html;charset=iso8859-1"%>
<html>
<head>
<title>乱码</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
</head>
<body>
必须的!乱码
</body>
</html>
这个乱码问题是最简单的乱码问题。就是页面编码不一致导致的乱码。
注意这个页面有三个部分涉及到了编码的设定:
第一处的编码格式为jsp文件的存储格式。Ecljpse会根据这个编码格式保存文件。并编译jsp文件,包括里面的汉字。
第二处编码为解码格式。因为存为UTF-8的文件被解码为iso8859-1,这样的话如有中文肯定出乱码。也就是必须与第一处一致,必须的。而第二处所在的这一行,可以没有。缺省也是使用iso8859-1的编码格式。所以如果没有这一行的话,也会出现乱码。必须一致才可以。
第三处编码为控制浏览器的解码方式。如果前面的解码都一致并且无误的话,这个编码格式没有关系。有的网页出现乱码,就是因为浏览器不能确定使用哪种编码格式。因为页面有时候会嵌入页面,导致浏览器混淆了编码格式。出现了乱码。
第二种:GET和POST传参时出现乱码。
这个乱码也是tomcat的内部编码格式iso8859-1在捣乱,也就是说post提交时,如果没有设置提交的编码格式,则会以iso8859-1方式进行提交,接受的jsp却以utf-8的方式接受。导致乱码。既然这样的原因,下面有几种解决方式,并比较。
A、GET请求参数处理
String str = new String(request.getParameter("something").getBytes("ISO-8859-1"),"utf-8") ; 这样的话,每一个参数都必须这样进行转码。很麻烦。但确实可以拿到汉字。
B、POST请求参数处理
在处理请求页面上开始处,执行请求的编码代码,request.setCharacterEncoding("UTF-8"),把提交内容的字符集设为UTF-8。使用String str = request.getParameter("something");即可得到汉字参数。但每页都需要执行这句话。
我的情况属于第二种,因为用Ajax提交请求,所以传递的参数都是按照Ajax的标准来编码的。Ajax的post方式,默认使用utf-8的编码提交参数的,所以要把Ajax的Content-Type请求头设置"application/x-www-form-urlencoded;charset="utf-8",以此来通知服务器,客户端发送参数所使用的编码。这样,服务器端可以直接通过String word = request.getParameter("something");来获取经过转码后的参数值,省去了request. setCharacterEncoding。当然,也可以在处理请求的Servlet中的doPost方法中加上request.setCharacterEncoding("UTF-8"),达到的效果是相同的。(经过本人试验过的)
终于解决了,现在开心多了。
我的问题:
在一个页面上,填写表单内容,提交采用Ajax实现,并且分别用GET和POST两种方法提交,最后把表单的内容显示到当前页面上。
如:输入姓名(小三),生日(2012年1月1日)。期望结果显示“您好,小三。您的生日是2012年1月1日”。
错误的结果肯定是显示乱码,无论是GET还是POST都是乱码,然后查资料,找解决办法。
看了好多资料,看来这问题大家都遇到过,终于明白了一些字符集的相关问题。
第一种:最基本的乱码问题
Java代码
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ page contentType="text/html;charset=iso8859-1"%>
<html>
<head>
<title>乱码</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
</head>
<body>
必须的!乱码
</body>
</html>
<%@ page language="java" pageEncoding="UTF-8"%> <%@ page contentType="text/html;charset=iso8859-1"%> <html> <head> <title>乱码</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> </head> <body> 必须的!乱码 </body> </html>
这个乱码问题是最简单的乱码问题。就是页面编码不一致导致的乱码。
注意这个页面有三个部分涉及到了编码的设定:
第一处的编码格式为jsp文件的存储格式。Ecljpse会根据这个编码格式保存文件。并编译jsp文件,包括里面的汉字。
第二处编码为解码格式。因为存为UTF-8的文件被解码为iso8859-1,这样的话如有中文肯定出乱码。也就是必须与第一处一致,必须的。而第二处所在的这一行,可以没有。缺省也是使用iso8859-1的编码格式。所以如果没有这一行的话,也会出现乱码。必须一致才可以。
第三处编码为控制浏览器的解码方式。如果前面的解码都一致并且无误的话,这个编码格式没有关系。有的网页出现乱码,就是因为浏览器不能确定使用哪种编码格式。因为页面有时候会嵌入页面,导致浏览器混淆了编码格式。出现了乱码。
第二种:GET和POST传参时出现乱码。
这个乱码也是tomcat的内部编码格式iso8859-1在捣乱,也就是说post提交时,如果没有设置提交的编码格式,则会以iso8859-1方式进行提交,接受的jsp却以utf-8的方式接受。导致乱码。既然这样的原因,下面有几种解决方式,并比较。
A、GET请求参数处理
String str = new String(request.getParameter("something").getBytes("ISO-8859-1"),"utf-8") ; 这样的话,每一个参数都必须这样进行转码。很麻烦。但确实可以拿到汉字。
B、POST请求参数处理
在处理请求页面上开始处,执行请求的编码代码,request.setCharacterEncoding("UTF-8"),把提交内容的字符集设为UTF-8。使用String str = request.getParameter("something");即可得到汉字参数。但每页都需要执行这句话。
我的情况属于第二种,因为用Ajax提交请求,所以传递的参数都是按照Ajax的标准来编码的。Ajax的post方式,默认使用utf-8的编码提交参数的,所以要把Ajax的Content-Type请求头设置"application/x-www-form-urlencoded;charset="utf-8",以此来通知服务器,客户端发送参数所使用的编码。这样,服务器端可以直接通过String word = request.getParameter("something");来获取经过转码后的参数值,省去了request. setCharacterEncoding。当然,也可以在处理请求的Servlet中的doPost方法中加上request.setCharacterEncoding("UTF-8"),达到的效果是相同的。(经过本人试验过的)
终于解决了,现在开心多了。
相关文章推荐
- 处理JSP中文跨页面间传参乱码的问题有两种方法实现方法(每个搞JSP的最常遇到的问题之一) 实例版:)
- Tomcat 5环境下的jsp中文乱码问题(分别针对POST、GET方法)
- jsp中使用传参时出现中文乱码问题的解决方法
- Java jsp/servlet GET/POST 字符集编码问题(中文乱码)
- jsp get传参中文乱码问题解决方法
- jsp传参 servlet接收中文乱码问题的解决方法
- jsp传参时若Url为中文时的乱码问题
- 关于jsp页面 title中文乱码问题的解决方法
- 【转】 JSP中文乱码问题解决方法小结
- Spring MVC 3 表单中文提交post请求和get请求乱码问题的解决方法
- 【The Most Important】浅谈JSP表单Post方式中文乱码问题
- JSP中文乱码问题解决方法小结(转)
- JSP MySQL插入数据时出现中文乱码问题的解决方法
- JSP中文乱码问题解决方法小结
- 解决在Unity3D中通过Post向服务器提交请求,表单中带有中文导致的乱码问题!
- jsp用过滤器解决中文乱码问题的方法
- action接收到来自jsp页面的请求时出现中文乱码问题处理方法
- jquery向.ashx文件post中文乱码问题的解决方法
- mysql字符集修改方法&中文乱码问题