彻底解决项目中的中文乱码问题

在Web项目中,由于各种诸如前后端或者项目与数据库编码不一致等原因都会造成中文乱码的问题,本文介绍了在项目中保持编码一致的方式,解决乱码的问题。

1. 项目内配置

1.1 web.xml配置过滤器

web.xml是项目中配置文件的起始部分,为了保险,应该在第一个filter里配置编码,配置方式如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<filter>
<filter-name>encoding-filter</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>encoding-filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

1.2 前端页面

如果你的前端页面采用JSP或者VM,则应设置页面的编码格式为UTF-8的形式。

1.3 前后端交互

对于前后端交互的方式也可设置编码格式,对于前端向后段传输数据时,可以设置http的header请求方式:

1
Content-Type: text/html; charset=utf-8

如果你是采用JQuery中ajax的方式提交给服务端,则应该如下方式设置请求:

1
Content-Type: application/json; charset="utf-8"

服务端返回数据给前端,如果是采用html的形式:

1
response.setContentType("text/html;charset=utf-8");

如果是采用JSON的形式:

1
response.setContentType("application/json;charset=utf-8");

2. Tomcat/JVM配置

如果你发现前端页面或者数据库的编码显示都正常,但是System.out.println()输出时会有乱码,则有可能是容器(Tomcat)中配置JVM的参数有问题,只需要在Tomcat的配置文件中在JVM参数JAVA_OPTS或者CATALINA_OPTS中加上:

1
-Dfile.encoding=UTF-8

使得JVM也以UTF-8的方式编码。

3. 数据库配置

3.1 数据库配置文件

当你的前端页面和后台服务器中都解决了编码问题,但是插入数据库或者读取数据库时有问题,就应该考虑数据库的编码方式。对于MySql数据库而言,首先找到安装文件my.ini,设置数据库本身的编码:

1
2
3
4
5
[client]
default-character-set=utf8

在[mysqld]下添加
character-set-server=utf8

重启MySql即可生效,可以以如下的方式查看MySql的编码方式:

1
mysql> show variables like "%char%";

3.2 查询语句

对于在项目中配置的数据库URL,这是数据库与你的项目交互的编码方式,也要设置编码:

1
jdbc:mysql://XX:3306/XX?useUnicode=true&characterEncoding=UTF-8

4. 总结

如果你的项目中出现了编码问题,正常情况下不会逃出以上三个部分,解决了恶心的编码问题,以后都会有乱码的困扰啦!

以上内容就是彻底解决项目中的中文乱码问题的全部内容了,谢谢你阅读到了这里!

Author: zhaoyh