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编码;


猜你喜欢

转载自blog.csdn.net/xcymorningsun/article/details/63845293