修改IDEA配置导致Spring Boot项目读取application.properties中文乱码问题
之前很多配置都是放在nacos里面,然后这次同事有个配置写在application.properties中,这个配置含有中文,启动之后发现拿到的中文值会乱码,然后就帮忙看了一下问题。
排查问题
经过不停的百度、排查发现,spring
读取application.properties
配置文件时候,是ISO-8859-1
的编码, OriginTrackedPropertiesLoader#load(boolean)
方法会new CharacterReader(this.resource)
类,OriginTrackedPropertiesLoader.CharacterReader#CharacterReader
类构造器中会把配置文件读成流,编码格式是ISO-8859-1
,而项目的配置文件编码格式是UTF-8
(后面会讲),所以就乱码了。
配置文件中的key和value
乱码的key和value
解决
知道问题所在了,就着手解决了,这边没有采用重写一个类的方式解决,而且修改IDEA
的配置。因为之前IDEA
中配置文件都是ISO-8859-1
的编码格式(默认就是ISO-8859-1
),后面改成了UTF-8
,但是当时没有在配置文件中使用中文,且为了项目都使用UTF-8
,所以把配置文件也改成了UTF-8
,这就是为什么一直没有遇到这种问题的原因,因为以前的项目出现中文的时候,没有改IDEA
的默认配置(现在想想,IDEA
多出一个这么个选项,也是有他的道理的)。
这是乱码时的IDEA
配置,下面的那个properties文件默认编码格式是UTF-8
,所以读取出来的时候才会乱码。
把配置改成ISO-8859-1
(改成这个之后,原来的配置文件中文会乱码,可以先复制出来,改完再拷贝进去)