response向页面输出中文时产生乱码问题
1、首先我们来创建一个类名为OutServlet的类,接下来让它继承HttpServelt类,然后重写doGet和doPost的方法。
2、然后我们在web.xml配置OutServlet的相关的信息,比如类的全路径和访问路径。
3、接下来我们在OutServlet的doGet方法中利用response对象调用getOutputStream()获取一个OutputStream的对象。
然后我们来调用OutpuStream对象的write()方法输出一个字节数组,这个字节数组由中文字符串转化得来。
4、利用OutputStream这种方式输出中文有可能产生乱码。注意是有可能,而不是一定产生乱码。
主要是看浏览器打开文件的编码方式和文件的默认编码方式是否一样,编码一致它就不会产生乱码,不一致就会产生乱码。
比如下面的两个结果:使用火狐浏览器访问产生乱码,使用360浏览器不会乱码。(注意浏览器不同的版本可能默认的编码方式可能不一样,所以你用同样的浏览器,得到的结果不一定一致;再加上浏览器也是可以自己设置编码方式的)
我使用的360安全浏览器,因为它有一个自动检测的功能,所以无论你的文件是GBK还是UTF-8的编码方式,它都会和你的文件一致,也就不会出现乱码。(当然这和版本也有关)
5、为了让它实现无论用什么浏览器都不会乱码,我们来设置浏览器打开这个文件的编码方式;然后设置文件的编码方式。让两者的编码方式一致,它就不会乱码了。
6、添加了上面的代码之后,再启动服务器,然后用之前乱码的火狐浏览器访问,可以发现这一次使用火狐也不乱码了。
1、另外一种向页面输出方式是字符流输出。
resp.getWriter().write("帅得不够明显");
2、字符流输出如果不设置编码方式,必然会乱码。
3、因为getWriter()得到的是一个PrintWriter,它有一个缓冲区,缓冲区的默认编码是ISO-8859-1 这种编码是不支持中文的,所以必乱码。
我们的话可以通过设置缓冲区编码和设置浏览器打开编码,让它们两个编码一致,这样就可以解决中文乱码了。
resp.setCharacterEncoding("utf-8");
resp.setHeader("Content-Type", "text/html;charset=UTF-8");
4、如下图所示当编码一致的时候,就不会出现乱码了。
另外
resp.setCharacterEncoding("utf-8");
resp.setHeader("Content-Type", "text/html;charset=UTF-8");
有一个简写方式,
resp.setContentType("text/html;charset=UTF-8");//一句等价于上面两句,所以我们用简写方式就可以了。