在项目中经常会遇到往数据库更新数据或者从数据库取数据时出现中文乱码问题,这种情况下需要确定乱码到底是在应用程序中产生的还是数据库中产生的
a.应用程序中乱码
1.在web.xml中设置过滤器,将从客户端的请求信息转换为utf-8;杜绝从源头出现的中文乱码;
<!-- filter(过滤字符编码,以防中文乱码等问题) -->2.在web容器中配置信息,例如在tomcat中:
<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>
<!-- 指定对哪些文件进行拦截 -->
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<!-- 对所有请求进行拦截 -->
<url-pattern>/*</url-pattern>
</filter-mapping>
在server.xml中找到相关节点,设置以下信息:
<Connector URIEncoding="UTF-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
3.将项目文件编码和IDE工具编码的默认设置为utf-8;
b.数据库中乱码
1.更改数据库配置中的字符集为utf-8(兼容中文,韩文,日文等);
2.在应用中与数据库连接时记得显性的指定字符集为utf-8;
例如:在项目中的数据库配置文件(xx.properties)中设置
jdbc.url=jdbc:mysql://localhost:3306/db?useUnicode=true&characterEncoding=utf-8;