开发web项目经常会遇到请求接口乱码、提交表单乱码,存入数据库乱码,网页显示乱码等情况。
乱码的原因很简单,都是因为数据传输方和接收方编码不一致导致的,但具体实现和配置,还是有不少地方,下面列举常见的编码设置(针对java项目,并且统一使用utf-8编码)。
nginx配置(GET乱码)
server {
.....
charset utf-8,gbk;
}
tomcat配置(GET乱码)
<Connector port="8080"
protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
...
URIEncoding="UTF-8"/>
spring配置(GET乱码)
@RequestMapping(method = RequestMethod.GET,value="/xxxx",
produces="text/html;charset=UTF-8")
web.xml配置(POST乱码)
<filter>
<filter-name>CharacterEncodingFilter</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>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
数据库连接
jdbc:mysql://x.x.x.x:3306/xxxx?useUnicode=true&characterEncoding=utf8
数据库和表定义
CREATE DATABASE db_name DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
create table blog_user
(
...
)engine=innodb default charset=utf8 auto_increment=xxx;
数据库配置文件(my.cnf)
[mysqld]下的default-character-set为utf8
[mysql]default-character-set=utf8
数据库客户端连接
SHOW VARIABLES LIKE ‘character_set_%’;
set names utf8;
以上的配置基本能让一个常规的web项目正常的提交和展示数据了。