想必做J2EE的程序员们都知道,无论是服务器(主要指Linxu/Unix)上的部署还是页面的中文显示,乱码问题一直都是很让人头痛的问题。其实原因很简单,洋鬼子们的东西默认都是UTF-8编码的,而我们的中文是GB2312编码的。这里我给大家介绍的是Struts、Sping、Hibernate架构(简称SSH架构)在Mysql数据库中解决中文乱码的问题,因为这个架构比较流行,所以我就拿这个架构作个例子,其实我这个方法是个通用的方法,对Spring的MVC架构(JSTL、Spring、Hibernate)也试用。
在开始切入正题之前我在插一句,因为UTF-8编码是国际编码,所以我们只要把所有需要改编码的地方都改成UTF-8编码(包括页面文件编码)就会完全解决编码问题了。OK 开始......
首先,需要在web.xml文件中加入<filter>过滤器,用spring-web.jar包中的CharacterEncodingFilter类(这个类在Eclipse导入Spring支持的时候就有了)把所有字符编码都过滤成UTF-8的,请看代码例子......
以下是web.xml代码片段:
<filter>
  <filter-name>EncodingFilter</filter-name>
  <filter-class>
   org.springframework.web.filter.CharacterEncodingFilter
  </filter-class>
  <init-param>
   <param-name>encoding</param-name>
   <param-value>UTF-8</param-value>
  </init-param>
  <init-param>  
     <param-name>forceEncoding</param-name>  
     <param-value>true</param-value>  
    </init-param> 
 </filter>
其次,在连接数据库的时候把编码也指定成UTF-8,我是在applicationContext.xml文件中写连接数据库的
以下是applicationContext.xml代码片段:
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
  <property name="driverClassName">
   <value>com.mysql.jdbc.Driver</value>
  </property>
  <property name="url">
   <value>jdbc:mysql://localhost:3306/tie?useUnicode=true&amp;characterEncoding=utf-8</value>
  </property>
  <property name="username">
   <value>root</value>
  </property>
  <property name="password">
   <value>123</value>
  </property>
 </bean>
好了,配置文件已经完成了,现在我来说说数据库方面的变动......
我使用的Mysql工具是 MySQL-Front,用这个工具把数据库中所有需要改变编码的地方都改成UTF-8的,这样在MySQL-Front下看到的中文就是正常的了,不然还是要出现乱码的。
请做如下更改:
1.右键你的数据库,选择属性,然后把字符集改成UTF-8的
 
2.右键你数据库中的表,选择属性,把字符集也改成UTF-8的
 
这样数据库的编码设置就可以了,表中的字段编码不需要改变的。
注意:还没完呢,还有最后一个过程,那就是你需要把所有的页面文件属性也改成UTF-8的,我是用Editplus 2把所有页面通过另存为的方法改变的
 
总算写完了,但是千万别忘了在写代码的时候加上头文件哦
以下是页面代码片段:
<%@ page language="java" pageEncoding="utf-8"%>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
通过以上方法我保你在不会被乱码所困扰了,如果我哪个地方说的不清楚可以通过回复的方法与我沟通。