J2EE中文乱码总结

来源:互联网 发布:数据交换共享平台 编辑:程序博客网 时间:2024/04/27 22:38

转载自:http://xuepiaoqiyue.blog.51cto.com/4391594/945197 

一、乱码的问题环节判断

遇到乱码,我们首先要定位是在哪一个环节乱码的,那就要先来熟悉下J2EE中中文字符所经历的环节:

1、 存数据时又可分为两步
    1) 先从页面到服务器(多由jsp页面编码设置及web服务器接收设置导致)
    2) 再由服务器到数据库(多由数据库导致)
2、 取数据时也可分为两步
    3) 先从数据库到服务器(多由数据库导致)
    4) 再由服务器到页面(多由jsp页面编码设置)
 
如何判断问题环节:
    1、我们可以先插入一条中文数据,看看数据库中是否乱码,如果乱码,则问题就出在插入数据环节;
    2、我们可以在数据库中直接插入一条中文数据,并且数据库查看正常,然后用我们的页面展示查看,若乱码,则问题出在获取数据环节;
    3、在控制台打印插入数据时的中文数据,若乱码,问题就在页面到服务器之间;
    4、取数据时同样可以在控制台打印从数据库取出的中文数据,若乱码,则问题在数据库到服务器之间;
 
二、乱码问题的处理
    首先,大家熟悉的中文编码有UTF-8、GBK、GB2312等,一个系统中,都要尽量保持编码格式的统一,以免不必要的麻烦,我平时都是采用UTF-8作为统一编码。
 
1)在jsp页面上可能有这几种情况导致乱码:
    a)下面代码中设置为UTF-8的地方没有设置或者设置不一致
 
  1. <%@ page language="java" contentType="text/html; charset=UTF-8" 
  2.     pageEncoding="UTF-8"%> 
  3. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
 
    b)页面本身的编码格式设置不正确
在eclipse中右击文件-properties-resource
Text file encoding中有默认编码格式设定并可以修改编码格式
Eclipse编码格式的设定可参考http://tangxh1129.iteye.com/blog/1295305
 
    c)浏览器编码格式的设定导致,将浏览器上的编码格式设定为UTF-8,各浏览器设置方式可能稍有差异
 
2)WEB服务器
web服务器对中文数据的接收也会造成乱码,而解决方法又要根据提交方式分为两种
    a)get方法
在server.xml里面增加URIEncoding="UTF-8"
  1. <Connector port="8080" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="UTF-8" /> 
 
    b)post方法
可在后台获取数据时添加转码如下:
String str = new String(request.getParameter("something").getBytes("ISO-8859-1"),"utf-8") ;
也可在系统中添加过滤器,省去一次次转码的重复操作,转码过滤器可参考http://blog.csdn.net/cn_gaowei/article/details/6673539
 
Web服务器也可能已经替我们完成了转码工作,在tomcat6.0.32上就需要过滤器,但tomcat6.0.35没有过滤器也一样可以,jetty也同样不需要自己添加过滤器
 
3)数据库
数据库的编码格式设定主要分为三种:
    一种是建立的表的语系设定问题
    一种是数据库server端的编码格式设定,这种设定决定了中文数据写入时是否会乱码;
    还有一种是client端的编码格式设定,这种设定决定了中文数据读取给web服务器时是否会乱码。

由于各种数据库的不同、部署环境的操作系统不同导致的数据库版本不同,导致各种数据库编码格式的设置也不太相同。
下面为常见mysql乱码问题的解决方法:
http://www.baidu.com/s?wd=mysql+%E4%B9%B1%E7%A0%81&tn=site888_1_pg&cl=3&ie=utf-8
http://www.cnblogs.com/finallyliuyu/archive/2010/05/14/1735759.html
原创粉丝点击