一:form在前台以post方式提交数据:
浏览器将数据(假设为“中国”)发送给服务器的时候,将数据变成0101的二进制数据(假设为98 99)时必然要查码表,浏览器以哪个码表打开网页,浏览器就以哪个码表提交数据。数据到达服务器后,数据(98 99)要封装到request中,在servlet中调用Request的getParameter方法返回的是字符串(“中国”),方法内部拿到数字后要转成字符,一定要查码表,由于request的设计者是外国人,所以默认查的是他们常用的ISO8859-1,这就是请求数据产生乱码的根源。
package com.yyz.request;import java.io.IOException; import java.io.PrintWriter;
import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; //以post方式提交表单 public class RequestDemo extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //请求数据的中文乱码问题 request.setCharacterEncoding("UTF-8");//客户端网页我们控制为UTF-8 String username = request.getParameter("username"); //获取数据正常,输出数据时可以查阅不同码表 response.setCharacterEncoding("gb2312");//通知服务器发送数据时查阅的码表 response.setContentType("text/html;charset=gb2312");//通知浏览器以何种码表打开 PrintWriter out = response.getWriter(); out.write(username); }
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request,response); }
二:form在前台以get方式提交数据:
get方式提交的数据依然是浏览器用什么码表打开就用什么码表发送。不同的是,以get方式提交数据时,request设置编码无效。即使设置了UTF-8还是会去查ISO8859-1。得到(? ?),要解决这个问题,需要拿着(??)反向查ISO8859-1,拿到(98 99)后,再去查正确码表。
package com.yyz.request; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; //以get方式提交表单 public class RequestDemo extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //请求数据的中文乱码问题 request.setCharacterEncoding("UTF-8");//以get方式提交数据时,request设置编码无效。即使设置了UTF-8还是会去查ISO8859-1 String username = request.getParameter("username"); System.out.println(username); byte source [] = username.getBytes("iso8859-1"); username = new String (source,"UTF-8"); System.out.println(username); }
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request,response); }
}
三:提交数据中文乱码问题总结:
1.如果提交方式为post,想不乱码,只需要设置request对象的编码即可。
注意:客户机数据是以哪种方式提交的,request就应该设成什么编码。
2.如果提交方式为get,设置request对象的编码是无效的,想不乱码,只能手工转换。
String data = "???????";//乱码字符串
byte source [] = data.getBytes("iso8859-1");//得到客户机提交的原始数据
data = new String (data.getBytes("iso8859-1"),"UTF-8");//解决乱码
//等同于
data = new String (source,"UTF-8");
3.get方式的乱码,还可以通过更改服务器配置的方式实现。更改Tomact的conf目录下的server.xml文件。
3.1
这种方式并不推荐,因为更改了服务器且并不灵活。
3.2
这么设置后,request的setCharacterEncoding设置什么编码,连接器就用什么编码,虽然比上一种更改灵活,但依然会导致我们的应用程序牢牢依赖于服务器,也不被推荐。
四:最后的最后,提一个小细节:URL地址后面如果跟了中文数据,一定要经过URL编码。表单提交的参数有中文数据,浏览器会自动帮我们编码,但如果是通过链接直接带中文参数,浏览器是不会帮我们编码的,这时想通过上述第二种方式解决中文乱码问题就时灵时不灵了,应该通过URLEncoding.encode(,"UTF-8")先编码。
本文向大家介绍Java 中 Form表单数据的两种提交方式,包括了Java 中 Form表单数据的两种提交方式的使用技巧和注意事项,需要的朋友参考一下 1 GET - 从指定的服务器中获取数据 1.1 GET方法 使用GET方法时,查询字符串(键值对)被附加在URL地址后面一起发送到服务器,例如:http://localhost:8080//customer/customer_info?res=j
本文向大家介绍完美解决Get和Post请求中文乱码的问题,包括了完美解决Get和Post请求中文乱码的问题的使用技巧和注意事项,需要的朋友参考一下 对于Post请求,只需在Servlet或者jsp中写入如下代码就可以把解决从表单中传入的中文乱码问题 request.setCharacterEncoding("utf-8"); 而对于Get请求,因为请求参数会被附加到地址栏的URL之后,所以不能用上
本文向大家介绍解决Tomcat修改get提交请求乱码问题,包括了解决Tomcat修改get提交请求乱码问题的使用技巧和注意事项,需要的朋友参考一下 1:表单提交controller获得中文参数后乱码解决方案 注意: jsp页面编码设置为UTF-8 ***************form表单提交方式为必须为post,get方式下面spring编码过滤器不起效果 修改web.xml,增加编码过滤器,如
本文向大家介绍SqlServer数据库中文乱码问题解决方法,包括了SqlServer数据库中文乱码问题解决方法的使用技巧和注意事项,需要的朋友参考一下 问题:创建新数据库,存入中文显示乱码??? 原因分析:SQL版的乱码问题还是出现在SQL SERVER的安装设置上。默认安装时系统默认的排序规则是拉丁文的排序规则,但一般人在安装时没有考虑到这一点,安装时只是点取下一步,安装完成后,造成了SQL版在
本文向大家介绍SpringMVC post请求中文乱码问题解决,包括了SpringMVC post请求中文乱码问题解决的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了SpringMVC post请求中文乱码问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 我们在页面难免提交一些中文数据给后台处理,但是发现后台拿到的数据乱码,可以
本文向大家介绍java 中的乱码问题汇总及解决方案,包括了java 中的乱码问题汇总及解决方案的使用技巧和注意事项,需要的朋友参考一下 java中的乱码问题 最近做项目经常会遇到Java中的乱码问题,于是就抽时间整理下出现乱码问题的情况和如何处理,这里做了一个整理, 分析 编码与解码 编码就是将字符转为字节,解码就是就是将字节转换为字符。 字节流与字符流 对文件的读写