在此环境下解决中文乱码问题,从前台到数据库,最好使用统一的UTF8编码。这里列出的个环节并不是都要设置,可以一步一步来查。如果是数据库中有乱码,先试一,如果是FLEX显示有问题,看三、四。
一、MySQL乱码
如果在数据库中查看的中文也是乱码,那先检查MySQL的设置。
1、建立的表格使用UTF8字符集:
CREATE TABLE `table` (
`Id` int(11) NOT NULL auto_increment,
…..
`createTime` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
PRIMARY KEY (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=UTF8;
2、my.ini设置默认字符集:
character-set-server=utf8
default-character-set=utf8
可用show variables like 'character%';来查看MySQL字符编码相关的变量值。
二、Spring定义datasource
在这指的是定义在bean中的datasource的连接url。datasource定在在(/WEB-INF/spring/infrastructure-config.xml)
<bean id="mysqlDS" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/Web2Test?useUnicode=true&characterEncoding=utf8"/>
<property name="username" value="root" />
<property name="password" value="admin123456" />
</bean>
三、文件的编码
不管是java还是flex项目,代码文件格式都使用UTF8
在project>properties>Resource里设置Text file encoding为utf-8
四、Flash端,设置flash.system.System.useCodePage=true;
“flash.system.System.useCodePage它决定使用哪个代码页来解释外部文本文件。当此属性设置为 false
时,会将外部文本文件解释为 Unicode。(保存这些文件时,必须使用 Unicode 对其进行编码。)当此属性设置为 true
时,将使用运行该应用程序的操作系统的传统代码页来解释外部文本文件。useCodePage
的默认值是 false
。”
五、Tomcat设置
/tomcat/conf/server.xml
<Connector port="8400" protocol="HTTP/1.1" connectionTimeout="20000" URIEncoding="UTF-8" redirectPort="9400"/>
六、Java端
给WEB.XML添加一编码转换的过滤器。
<filter>
<filter-name>Character Encoding Filter</filter-name>
<filter-class>edu.lltang.characterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Character Encoding Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
edu.lltang.characterEncodingFilter.java
public class characterEncodingFilter implements Filter {
private FilterConfig filterConfig = null;
public void destroy() {}
@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1,FilterChain arg2) throws IOException, ServletException {
arg0.setCharacterEncoding(filterConfig.getInitParameter("encoding"));
arg2.doFilter(arg0, arg1);
}
@Override
public void init(FilterConfig arg0) throws ServletException {
this.filterConfig = arg0;
}
}
七、XML
如果用到了XML来交换数据,记得在XML中显示指定编码。<?xml version="1.0" encoding="utf-8"?>