使用response对象设置响应体时有两个步骤:
1、获取输出流(字节流或字符流)
2、使用输出流,将数据输出到客户端浏览器
这时候如果传输的数据是中文,输出到浏览器就会 乱码
乱码原因:
首先,要知道乱码的根本原因是什么,乱码的根本原因在于 编码和解码使用的字符集不一样。那么在从服务器输出数据到客户端的过程中,有几次编码和解码过程?又分别是在哪里执行的?在输出数据的过程中,有 一次编码,是 tomcat执行的,它按照自己的字符集将数据编码后发送给客户端浏览器,有 一次解码,是 浏览器执行的,浏览器将接收的数据按照自己的字符集解码后打印在屏幕上。
而 tomcat的默认编码是ISO-8859-1, 浏览器的默认编码是操作系统的编码,也就是GBK,两者的编码格式不一样,就造成了中文乱码问题
解决方案:
解决方案不止一种,记录一种比较简单地使用response设置响应头的方法来设置 Content-Type
具体操作
在获取输出流 之前(一定是之前)加上 response.setHeader("content-type","text/html;charset=utf-8"); 这个方法 不仅可以设置流的编码,还可以告诉浏览器发送数据的编码方式,并建议浏览器使用同样的字符集解码,这样就解决了乱码的问题由于只需要设置content-type这个响应头,所以有另一个方法更为简单:
response.setContentType("text/html;charset=utf-8");