Bootstrap

修改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(改成这个之后,原来的配置文件中文会乱码,可以先复制出来,改完再拷贝进去)
在这里插入图片描述

;