Response中文乱码问题
简述
我们用response使用输出流输出中文数据到浏览器,常常会发生乱码
乱码原因
浏览器使用的字符集默认就是我们的操作系统字符集,window中文就是gbk
我们使用输出流输出的数据就是一种编码的过程,输出流对象是从response获取出来的,源头上就是tomcat获取出来的
那tomcat是谁写的,反正不是中国人,获取的输出流编码是ISO-8859-1
那么编码解码字符集不同,即产生了乱码
总的来说,有关response的乱码是由于默认输出ISO-8859-1的字符集编码,浏览器又默认用gbk解码(windows下),就乱码了。所以服务器就有必要告诉浏览器用什么字符集来解码。
乱码的解决
既然你默认用gbk,那么我们用GBK来输出就没有乱码了
我们可以设置获取的输出流的编码,在获取流之前使用如下代码,设置为gbk即可
response.setCharacterEncoding("GBK");
但其实这是治标不治本,你如果不知道浏览器的解码字符集,就无法解决乱码了
所以我们可以在响应消息里的响应头:content-type里告诉浏览器你应该使用什么解码字符集(我用utf8输出,告诉你你要用utf8解码)
//设置获取的流的字符集 response.setCharacterEncoding("utf-8"); //告诉浏览器你应该用什么解码字符集解码 response.setHeader("content-type","text/html;charset=utf-8");
reponse对象提供了一种简单的形式设置编码
response.setContentType("text/html;charset=utf-8");
一点一点积累,一点一点蜕变!