JavaWeb——响应编码与请求编码
一、引言
以前非常怵头web中编码问题,如今没办法必须搞了,硬着头皮把里面的东西搞清楚了,供大家分享下==务必先了解原理,再扎进代码==
二、编码基础
这里主要理解字符集与字符编码问题。
字符集就像一个字库,类似英文,中文,日文等,只是一个库;
字符编码就像一个映射关系,将字符集映射为一个个数用计算机存储;如utf,注意utf-8,utf-6等都是一个字符集,不同的字符编码==
三、响应编码
一般tomcat服务器默认解码ios-8859-1,从tomcat8以后默认utf-8不用再修改,浏览器默认解码是gbk,这里所以我们一般都自己设置,这样比较好控制。
这里response.setHeader("content-type", "text/html;charset=utf-8");有两个作用:1返回数据按照utf-8编码;2设置contenttype告知浏览器编码格式,然后浏览器就会用相应的格式解码,从而不会出现乱码==
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.setHeader("content-type", "text/html;charset=utf-8");
//request.setCharacterEncoding("utf-8");
response.getWriter().println("哈哈哈");
}
四、请求编码
这里分为get请求和post请求:
1、get请求
直接使用getParameter()就可以,不用转换,要是tomcat7及之前的可能要设置注释代码,因为之间的tomcat默认gbk,要转换一下。
然后设置返回编码格式即可setHeader,这里只能用gbk和utf-8,我开始设置了iso-8859-1除了乱码,后来发现自己脑子water了,iso-8859-1根本不支持中文==
String name=request.getParameter("name");
/* byte[]bytes=name.getBytes("iso-8859-1");
name=new String(bytes,"utf-8");
response.setHeader("content-type", "text/html;charset=utf-8");*/
response.setHeader("content-type", "text/html;charset=utf-8");
response.getWriter().print(name);
2、post请求
post请求要设置相应的解码方式,这个一般由发出post请求的界面决定,比如有表单的jsp界面它默认编码utf-8,发送的请求也是utf-8的。
request.setCharacterEncoding("utf-8");
String name=request.getParameter("name");
response.setHeader("content-type", "text/html;charset=utf-8");
//response.setHeader("content-type", "text/html;charset=utf-8");
response.getWriter().print(name);
五、URL编码
URL编码,就是将中文转换为16进制表示,为了防止网络传输中数据丢失。
get一般不会对中文编码,post会对中文进行编码,然后在浏览器自动编码,在服务器自动解码。
四、总结
- 设置响应编码;
- 设置请求编码,get与post;
- URL编码;
本文地址:https://blog.csdn.net/xcymorningsun/article/details/63845293