Tomact设置字符集,在Tomcat家目录下的conf中的server.xml配置文件,在配置端口的选项中设置字符集:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8" useBodyEncodingForURI="true" />
其中,8080端口为可以访问应用的端口,connectionTimeout为连接超时时间, URIEncoding="UTF-8",设置字符集为utf-8,useBodyEncodingForURI="true"表示请求参数的编码方式要使用请求体的编码方式。
开启应用,访问并登录应用之后之后,发现出现字符乱码问题,排查可能是数据库问题,进入数据库mysql,查看字符集:
show variables like '%char%';
可以看到,红色框内的character_set_database字符集为utf8的,但是访问应用时仍然出现乱码问题, 查看其他设置,黄色框内的字符集为Latin1,这是数据库初始配置,这里不设置也可能出现乱码问题。
character_set_client 、character_set_connection、character_set_results 这三个设置是客户端每次连接进来设置的。登录mysql之后,命令:SET names utf8; 就相当于设置了此三个选项,也可以分别设置:
SET character_set_client = utf8;
SET character_set_connection = utf8;
SET character_set_results = utf8;
退出mysql连接之后,重新启动应用服务,登录应用,查看字符集。
备注:三个选项字符集是需要远程连接mysql的客户端进行设置的,详解,
character_set_client :发送的数据必须与client指定的编码相同,服务器会使用该编码来解读客户端发送过来的数据;
character_set_connection:通过此设置与client相同,该编码不会导致乱码,当执行的是查询语句时,客户端发送过来的数据会先转换成connection指定的编码,只要客户端发送过来的数据与client指定的编码一致,就不会出现问题;
character_set_results :响应的编码,即查询结果返回给客户端的编码,说明客户端必须使用result指定的编码来解码。
客户端远程连接mysql默认是拉丁字符集,但是执行的数据库文件指定字符集为utf8的,所以在执行之后,访问应用会出现乱码问题。
Linux下远程mysql,最好指定字符集,不然会出现乱码问题:
mysql -h <mysql_ip>:<port> -u <user_name> -p <password> --default-character-set=utf8