news 2026/8/16 12:37:42

SpringBoot读取properties中文乱码解决方案

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SpringBoot读取properties中文乱码解决方案

目录

一、问题描述

二、解决方案

2.1、网络上的解决办法

2.1.1、修改IDEA编码?

2.1.2、改为yml配置

2.1.3、读取时设置编码

2.2、重写资源加载类(个人推荐)


一、问题描述

由于业务需求需要在application.properties中配置一个带有中文字符串的参数,注入到业务类中,但是发现注入的中文是乱码的。大概情况如下所示:

package com.cnstar.test; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; /** * cnstar单元测试 * @author cnstar **/ @SpringBootTest(classes = TestApplication.class) @RunWith(SpringRunner.class) public class CnstarTest { @Value("${name}") private String name; @Test public void test1() { System.out.println("中文内容:" + name); } }

打印输出结果:

二、解决方案

2.1、网络上的解决办法

遇到问题首先想到网络上找解决方案,网络上的解决办法基本一致,概括为以下三种。

2.1.1、修改IDEA编码

在IDEA中将所有的编码设置为UTF-8,同时勾上Transparent native-to-ascii conversion的选项,然后重新创建application.properties的文件。

运行结果:

但是这个配置文件用记事本打开编辑时,发现内容被修改成了unicode编码,在线上修改时变得很困难,所以此方式我不做推荐。

2.1.2、改为yml配置

就是将application.properties的文件修改为application.yml的结构,重启项目。

运行效果

证明是可行的。这种方式可以根据自己需求选择,但是当配置文件的内容层级较深时也不推荐,容易看错行配置。

2.1.3、读取时设置编码
package com.cnstar.test.property; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.PropertySource; import javax.annotation.PostConstruct; @Configuration @PropertySource(value = "classpath:application.properties", encoding = "utf-8") public class CnstarProperty { @Value("${name}") private String name; @PostConstruct public void init() { System.out.println("name is :" + name); } }

亲测发现这种方式针对application.properties是不行的。

但是针对其他名称的properties文件是可以的

package com.cnstar.test.property; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.PropertySource; import javax.annotation.PostConstruct; @Configuration @PropertySource(value = "classpath:test.properties", encoding = "utf-8") public class CnstarProperty { @Value("${name2}") private String name; @PostConstruct public void init() { System.out.println("name is :" + name); } }

运行结果:

2.2、重写资源加载类(个人推荐)

1、创建一个类继承PropertiesPropertySourceLoader,因SpringBoot版本不同PropertiesPropertySourceLoader****类会有差别,本文采用的SpringBoot版本是2.3.12.RELEASE。

package com.cnstar.utils; import org.springframework.core.io.*; import org.springframework.core.env.*; import org.springframework.boot.env.*; import java.util.*; import java.io.*; /** * 解快springBoot读取properties配置文件中文乱码的问题 * @author cnstar **/ public class SelfPropertySourceLoader extends PropertiesPropertySourceLoader { @Override public List<PropertySource<?>> load(String name, Resource resource) throws IOException { Map<String, ?> properties = this.loadUseUtf8(resource); if (properties.isEmpty()) { return Collections.emptyList(); } return Collections.singletonList(new OriginTrackedMapPropertySource(name, Collections.unmodifiableMap((Map<?, ?>)properties), true)); } private Map<String, ?> loadUseUtf8(Resource resource) throws IOException { Properties props = new Properties(); InputStream is = resource.getInputStream(); try { String filename = resource.getFilename(); if (filename != null && filename.endsWith(".xml")) { props.loadFromXML(is); } else { props.load(new InputStreamReader(is, "utf-8")); } } finally { is.close(); } return (Map)props; } }

2.在resource目录下创建目录META-INF,在META-INF目录下创建文件spring.factories

内容如下:

org.springframework.boot.env.PropertySourceLoader=com.cnstar.utils.SelfPropertySourceLoader

重新运行:

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/11 6:29:13

ParsecVDisplay虚拟显示器:突破物理界限的数字工作空间革命

ParsecVDisplay虚拟显示器&#xff1a;突破物理界限的数字工作空间革命 【免费下载链接】parsec-vdd ✨ Virtual super display, upto 4K 2160p240hz &#x1f60e; 项目地址: https://gitcode.com/gh_mirrors/pa/parsec-vdd 在数字时代&#xff0c;高效的工作环境往往意…

作者头像 李华
网站建设 2026/8/13 19:50:31

魔兽争霸III现代优化指南:从画面修复到性能全面提升

魔兽争霸III现代优化指南&#xff1a;从画面修复到性能全面提升 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为经典魔兽争霸III在现代电脑上的…

作者头像 李华
网站建设 2026/8/14 7:27:09

PDF-Extract-Kit数据安全:处理过程中的隐私保护

PDF-Extract-Kit数据安全&#xff1a;处理过程中的隐私保护 1. 引言 1.1 背景与需求 随着数字化办公的普及&#xff0c;PDF文档已成为科研、教育、企业等领域的核心信息载体。然而&#xff0c;大量敏感信息&#xff08;如个人身份资料、商业合同、学术成果&#xff09;以PDF…

作者头像 李华
网站建设 2026/8/8 13:36:56

PDF-Extract-Kit实战:金融合同关键信息提取系统搭建

PDF-Extract-Kit实战&#xff1a;金融合同关键信息提取系统搭建 1. 引言 在金融行业中&#xff0c;合同文档的处理是日常运营中不可或缺的一环。从贷款协议到投资条款&#xff0c;这些PDF格式的法律文件往往包含大量结构化与非结构化信息&#xff0c;如签约方名称、金额、利率…

作者头像 李华
网站建设 2026/8/3 12:20:28

NBTExplorer完全指南:轻松掌握Minecraft数据编辑核心技巧

NBTExplorer完全指南&#xff1a;轻松掌握Minecraft数据编辑核心技巧 【免费下载链接】NBTExplorer A graphical NBT editor for all Minecraft NBT data sources 项目地址: https://gitcode.com/gh_mirrors/nb/NBTExplorer NBTExplorer是一款功能强大的图形化NBT编辑器…

作者头像 李华
网站建设 2026/8/15 23:42:17

PDF-Extract-Kit入门指南:快速处理扫描版PDF

PDF-Extract-Kit入门指南&#xff1a;快速处理扫描版PDF 1. 学习目标与前置知识 1.1 教程定位 本文是一篇从零开始的实践教程&#xff0c;旨在帮助开发者和文档处理人员快速掌握 PDF-Extract-Kit 的安装、配置与核心功能使用。该工具由“科哥”基于开源模型二次开发构建&…

作者头像 李华