1.为什么会出现乱码?
B/S 应用程序是一种请求相应模式,浏览器默认的语言编码是操作系统的编码,而 Tomcat 默认的是 ISO-8859-1。
2.何时会出现中文乱码?
两方面:
请求(浏览器对服务器说话)request.getParamenter得到客户端请求参数
相应(服务器对浏览器说话):
表现一:PrintWriter out = response.getWriter();
out.write(“你好,世界!”);
表现二:jsp中的中文乱码,因为jsp本质上还是servlet,它的所有内容是通过out.write向客户端发送的.
那么,到底如何解决呢?肯定是让他们使用统一的编码集.(可以理解为2个不同国家的人说话时用同一种语言,例如:English)
- ISO-8859-1 美国人标准,很多软件默认使用此编码,如 tomcat,mysql 等。
- GBK(gb2312)中国人标准.
- UTF-8 因内部使用 unicode 编码。一般为 16 位,而 unicode 为 32
位,支持地球已知的所有语言,我们的首选。
解决方法:
解决方法一:硬编码:
String name = new String(x.getBytes(“ISO-8859-1”), “UTF-8”);
优点:对 get,post 请求都有效;
缺点:当请求字段较多时,不利于处理;
解决方法二:只对 post 有效
request.setCharacterEncoding(“UTF-8”);必须request.getParamenter 方法调用之前设置。(代码放在第一行)
解决方法三:只对 get 有效
修改 server.xml