原创

框架搭建系列之:解决读取Properties配置文件中文乱码的问题

一、问题

读取Properties配置文件是否如果里面的配置含有中文,则会出现乱码的情况。
比如用工具类读取,或者是使用SpringBoot的 @ConfigurationProperties(prefix = "xxx")方法读取都可能会遇到这个问题,
包括做微服务集成SpringCloudConfig的时候,访问配置文件(如 http://127.0.0.1:8080/config.properties )也会出现乱码

二、原因

乱码的原因是:spring 默认使用org.springframework.boot.env.PropertiesPropertySourceLoader 来加载配置,底层是通过调用 Properties 的 load 方法,而load方法输入流的编码是 ISO 8859-1。

三、解决

解决方法:实现org.springframework.boot.env.PropertySourceLoader 接口,重写 load 方法。

步骤1. 新建自定义解析器MyPropertiesHandler,继承PropertiesPropertySourceLoader,重写方法。

public class MyPropertiesHandler extends PropertiesPropertySourceLoader {

    @Override
    public String[] getFileExtensions() {
        return new String[]{"properties", "xml"};
    }

    @Override
    public List<PropertySource<?>> load(String name, Resource resource) throws IOException {
        ArrayList<PropertySource<?>> list = new ArrayList<>();
        Properties properties = getProperties(resource);
        if (!properties.isEmpty()) {
            list.add(new PropertiesPropertySource(name, properties));
        }
        return list;
    }

    private Properties getProperties(Resource resource) throws IOException {
        Properties properties = new Properties();
        InputStream inputStream = resource.getInputStream();
        properties.load(new InputStreamReader(inputStream, StandardCharsets.UTF_8));
        inputStream.close();
        return properties;
    }
}

步骤2. resources文件夹下面新建META-INF文件夹,在里面创建spring.factories文件,指定使用我们自定义的解析器

org.springframework.boot.env.PropertySourceLoader=cn.huanzi.qch.config.configserver.MyPropertiesHandler

步骤3. application.properties配置文件添加配置,解决http响应中文乱码问题

#解决http响应数据中文乱码问题
spring.http.encoding.force=true
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
server.tomcat.uri-encoding=UTF-8

参考资料:
https://www.cnblogs.com/huanzi-qch/p/10149547.html 主要参考
https://blog.csdn.net/A169388842/article/details/84989796 仅供参考
https://blog.csdn.net/zhanghaishan/article/details/78895005 这篇情况没遇到过到时候遇到再看看

正文到此结束
本文目录