開發(fā)web項目經(jīng)常會遇到請求接口亂碼、提交表單亂碼嗅虏,存入數(shù)據(jù)庫亂碼洛姑,網(wǎng)頁顯示亂碼等情況。
亂碼的原因很簡單旋恼,都是因為數(shù)據(jù)傳輸方和接收方編碼不一致導(dǎo)致的吏口,但具體實現(xiàn)和配置,還是有不少地方冰更,下面列舉常見的編碼設(shè)置(針對java項目产徊,并且統(tǒng)一使用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>
數(shù)據(jù)庫連接
jdbc:mysql://x.x.x.x:3306/xxxx?useUnicode=true&characterEncoding=utf8
數(shù)據(jù)庫和表定義
CREATE DATABASE db_name DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
create table blog_user
(
...
)engine=innodb default charset=utf8 auto_increment=xxx;
數(shù)據(jù)庫配置文件(my.cnf)
[mysqld]下的default-character-set為utf8
[mysql]default-character-set=utf8
數(shù)據(jù)庫客戶端連接
SHOW VARIABLES LIKE ‘character_set_%’;
set names utf8;
以上的配置基本能讓一個常規(guī)的web項目正常的提交和展示數(shù)據(jù)了蜀细。