【问题描述】
Servlet的中文乱码有两种情况。
一、请求。使用POST方式请求时获取参数乱码,如下图所示:
二、响应。响应的乱码有两种:一是服务器乱码,二是客户端浏览器乱码。以下为谷歌浏览器展示的乱码形式:
【解决方案】
一、请求。解决请求乱码很简单,使用setCharacterEncoding("UTF-8")方法即可。如下图所示:
二、响应。
我们先看看服务器默认使用的是什么代码形式。
由此可见,服务器默认使用的是字符集ISO-8859-1。于是为了解决服务器端乱码,第一步我们可以使用和请求时的同样方式,如下图所示:
但这只是解决了服务器端乱码,我们在谷歌浏览器端看到的依旧是乱码。所以还要进行第二步设置,设置客户端浏览器乱码。使用setHeader("Content-Type", "text/html;charset=utf-8")方法。
此时,成功解决乱码。
实际上,以上是分开设置的服务器乱码和客户端浏览器乱码问题。还可以将两步合并,使用resp.setContentType("text/html;charset=utf-8")方法,如下图所示:
实际上,还有一种方式,即由于浏览器导致的乱码可以在浏览器中直接修改字符集方式,但这种方式只能临时修改,无法彻底解决,所以不提倡。
至此,我们对上面的解决方案总结如下:
响应端乱码是由于服务器端默认使用了ISO-8859-1字符集,所以要通过修改服务器端和客户端浏览器的字符集为UTF-8解决。
1、设置服务器响应字符集方法
resp.setCharacterEncoding("UTF-8");
2、设置客户端浏览器字符集方法
resp.setHeader("Content-Type", "text/html;charset=utf-8");
3、同时修改服务器和客户端浏览器字符集
resp.setContentType("text/html;charset=utf-8");