请求为什么会有乱码?
答:当表单提交时,浏览器对中文参数值进行编码(使用打开表单所在的页面时的字符集进行编码,web服务器在默认情况下会使用iso-8859-1去解码,编码和解码方式不一致,就会产生乱码。
解决方案:request.setCharacterEncoding("UTF-8");对于get 还要在tomcat服务器目录下的conf文件夹下找到server.xml文件,打开进行如下配置
。
如何查看页面的字符集编码方式?
图中红框内就表示表单所在的页面的字符集,此时因为表单的字符集是iso-8859-1所以服务器就不用设置解码方式,中文依然不会乱码。
response响应回浏览器出现中文乱码?
getOutputStream();:
使用该字节输出流,不能直接输出中文,会出异常,要想输出中文,解决方法如下
解决:getOutputStream().write(xxx.getBytes("UTF-8")); //手动将中文用UTF-8码表编码,变成字节传输,变成字节后,就不会报异常,并且tomcat也不会在编码,因为已经编码过了,所以到浏览器后,
如果浏览器使用的是UTF-8码表解码,那么就不会出现中文乱码,反之则出现中文乱码,所以这个方法,不能完全保证中文不乱码
getWrite();:
使用字符输出流,能直接输出中文,不会出异常,但是会出现乱码。
解决:通知tomcat和浏览器使用同一张码表。
response.setContentType("text/html;charset=utf-8"); //通知浏览器使用UTF-8解码
通知tomcat和浏览器使用UTF-8编码和解码。这个方法的底层原理是这句话:response.setHeader("contentType","text/html;charset=utf-8");
注意:getOutputStream()和getWrite() 这两个方法不能够同时使用,一次只能使用一个,否则报异常