1.编译器中默认设置的编码方式是ios-8859-1
ios-8859-1不兼容中文编码,查不到的字符就会显示成63,而浏览器默认的解码表是GB2312,会将63去转化成?,这也是最常见的乱码
解决方法:
我们只要在进行编码字符之前加上 response.setCharacterEncoding("utf-8");即可将编码方式转化为utf-8。
但此时如果直接编码还是会报乱码问题,原因是之前说过浏览器的默认解码方式为GB2312,所以只要我们去将浏览器的解码方式改为GB2312即可。
但是每次去改动浏览器太过麻烦。
为此在HttpServletResponse中提供了两种解决乱码方案:
1.
//设置HttpServletResponse使用utf-8
response.setCharacterEncoding("utf-8");
//通知浏览器使用utf-8解码
response.serHeader("Content-Type","text/html;charset=utf-8");
2.
//包含上面两种方式
response.setContentType("text/html;charset=utf-8");
2.请求参数乱码解决问题
在表单将数据提交给Servlet方法去处理数据时可能会出现乱码问题,原因是虽然编码方式采用了utf-8,但是解码的默认方式依旧是ios-8859-1。
如果你的表单的提交方式是post,那你只需要在字符解码前加
rrequest.setCharacterEncoding("utf-8");//只对post有效
如果你的提交方式是get,那么会麻烦一点,比如如果你需要解码的对象是name,那么需要在输出之前加上 name=new String (name.getBytes("ios8859-1),"utf-8"),每一次变量都需要加。
解决get的乱码还有一种方法就是将tomcat换成8及以上的版本,那么解决方法就和post相同,否则每个变量都需要自己写解码方式。