news 2026/10/29 2:12:31

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/10/26 19:24:04

艾尔登法环性能优化工具使用全攻略

艾尔登法环性能优化工具使用全攻略 【免费下载链接】EldenRingFpsUnlockAndMore A small utility to remove frame rate limit, change FOV, add widescreen support and more for Elden Ring 项目地址: https://gitcode.com/gh_mirrors/el/EldenRingFpsUnlockAndMore 还…

作者头像 李华
网站建设 2026/10/26 19:23:41

艾尔登法环帧率解锁终极指南:告别60FPS限制,体验流畅游戏

艾尔登法环帧率解锁终极指南&#xff1a;告别60FPS限制&#xff0c;体验流畅游戏 【免费下载链接】EldenRingFpsUnlockAndMore A small utility to remove frame rate limit, change FOV, add widescreen support and more for Elden Ring 项目地址: https://gitcode.com/gh_…

作者头像 李华
网站建设 2026/10/27 8:50:15

超强攻略:zotero-style插件让文献管理效率翻倍的神奇功能

超强攻略&#xff1a;zotero-style插件让文献管理效率翻倍的神奇功能 【免费下载链接】zotero-style zotero-style - 一个 Zotero 插件&#xff0c;提供了一系列功能来增强 Zotero 的用户体验&#xff0c;如阅读进度可视化和标签管理&#xff0c;适合研究人员和学者。 项目地…

作者头像 李华
网站建设 2026/10/26 11:31:11

Scroll Reverser终极指南:macOS滚动方向管理的完整解决方案

Scroll Reverser终极指南&#xff1a;macOS滚动方向管理的完整解决方案 【免费下载链接】Scroll-Reverser Per-device scrolling prefs on macOS. 项目地址: https://gitcode.com/gh_mirrors/sc/Scroll-Reverser 还在为macOS设备间滚动方向混乱而烦恼吗&#xff1f;Scro…

作者头像 李华
网站建设 2026/10/27 8:50:15

彻底释放磁盘空间:DriverStoreExplorer驱动清理全攻略

彻底释放磁盘空间&#xff1a;DriverStoreExplorer驱动清理全攻略 【免费下载链接】DriverStoreExplorer Driver Store Explorer [RAPR] 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 你的Windows电脑是否越用越慢&#xff1f;C盘空间总是不知不觉…

作者头像 李华
网站建设 2026/10/27 21:37:49

Keil5与STM32在工控设备中的应用实例

Keil5与STM32在工控设备中的实战落地&#xff1a;从开发到部署的全链路解析工业现场的控制柜里&#xff0c;一块小小的电路板正默默执行着成千上万次的数据采集与逻辑判断。它没有炫酷的界面&#xff0c;却承载着产线稳定运行的关键命脉——这正是嵌入式系统在现代工控设备中的…

作者头像 李华