Java项目中字符集的相关设置

无论实在开发中,还是实际部署当中,我们都可能会遇见乱码的问题,为了避免在遇到问题时再手足无措,不如在一开始的时候,我们就提前设置好所有的字符集。在编程开发中,我们所用的字符集均为 UTF-8,这篇文章是为了记录我在编程开发中的一些需要设置字符集的地方

Spring Boot 中的乱码和编码问题


Spring Boot 文档中,默认编码为 UTF-8

1
2
spring.http.encoding.charset=UTF-8 # Charset of HTTP requests and responses. Added to the "Content-Type" header if not set explicitly.
spring.http.encoding.enabled=true # Enable http encoding support.

相关的配置会在 HttpEncodingAutoConfiguration 中使用

1
2
3
4
5
6
7
8
9
@Bean
@ConditionalOnMissingBean(CharacterEncodingFilter.class)
public CharacterEncodingFilter characterEncodingFilter() {
CharacterEncodingFilter filter = new OrderedCharacterEncodingFilter();
filter.setEncoding(this.properties.getCharset().name());
filter.setForceRequestEncoding(this.properties.shouldForce(Type.REQUEST));
filter.setForceResponseEncoding(this.properties.shouldForce(Type.RESPONSE));
return filter;
}

情况下 forceRequestEncodingforceResponseEncoding 是为 false

在配置中加上一行

1
spring.http.encoding.force=true

转载自 @夜明的孤行灯

https://www.huangyunkun.com/2016/11/05/spring-boot-encoding-with-utf8/

Tomcat 字符集设置


tomcat 目录下 conf/server.xml 将相关语句上添加 URIEncoding="UTF-8"

1
2
3
<Connector port="8008" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8"/>

需要注意的是这里是 URI 而不是 URL

参考自 @脚本之家

https://www.jb51.net/article/132536.htm

MySQL 数据库设置字符集


我使用的是 MySQL57,默认编码是拉丁 (latin1),当输入中文的时候就会报错,所以需要将编码修改为 utf8

  • 在mysql安装目录下找到 my.ini 文件,我的安装目录是在 C:\ProgramData\MySQL\MySQL Server 5.7

  • [client] 下添加

    default-character-set=utf8

  • [mysqld] 下添加

    character-set-server=utf8