JavaWeb servlet,乱码的原因和解决

请求为什么会有乱码?

  答:当表单提交时,浏览器对中文参数值进行编码(使用打开表单所在的页面时的字符集进行编码,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() 这两个方法不能够同时使用,一次只能使用一个,否则报异常    

猜你喜欢

转载自www.cnblogs.com/Tony100/p/11460965.html