乱码有以下几方面原因造成:
- 取数据乱码
- 调试数据乱码
- 传递数据乱码
第1种情况主要是注意你所取得的数据来自文本还是页面传递,这个很容易解决,注意整个项目编码格式和获取到的数据格式一样,建议统一使用UTF-8编码。主要说说第2种和第3种情况。
调试数据乱码
在确认了第1种情况下无乱码时,但在myeclipse控制台输出中文为乱码。原因是英文系统默认显示格式为英文,应将系统控制面板
“Clock, Language, and Region”——“Region and Language”——“Formats”选项卡里的“Format”选择简体中文。之后重启myeclipse。
传递数据乱码
在确认了第1、2种情况下无乱码时,即数据在调试中,内存数据值显示正常,但插入数据库显示问号。原因可能是数据库建库时没用统一的编码格式,如果统一使用UTF-8编码,建议按下图所示建库。
当在数据库客户端里使用insert into和select均显示正常中文后,数据库这边就保证了中文的正常显示。
接下来,需要设置数据库连接的编码格式。如果是采用SSH2的话,在applicationContext.xml里找到数据库连接的代码,改成如下所示:
<property name="url" value="jdbc:mysql://localhost:3306/DBName?useUnicode=true&characterEncoding=utf-8">
</property>
最后再在web.xml里添加Spring的编码转换过滤器就可以了。
<filter>
<filter-name>CharacterEncoding</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>ignore</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>