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的文件。

运行结果:<

<think>嗯,用户问的是在Spring Boot的application.properties文件中遇到中文乱码的问题,该怎么正确配置编码。首先,我需要回忆一下Spring Boot处理properties文件的默认编码方式。记得Spring Boot默认使用ISO-8859-1来读取properties文件,这可能导致中文字符显示乱码。用户可能已经直接在文件里写了中文,但没意识到编码问题。 接下来,我得考虑解决方案。可能的解决步骤有几个:第一,确保文件本身的编码是UTF-8,比如用IDE设置保存为UTF-8。第二,在配置中使用Unicode转义,比如\u形式,但这样不太方便。第三,改用YAML格式,因为YAML默认支持UTF-8。第四,自定义配置类,强制使用UTF-8读取properties文件。 用户可能对如何具体操作不太清楚,比如怎么改IDE的编码设置,或者如何编写自定义的配置类。需要分步骤说明,并且给出示例代码。同时,可能需要提醒用户不同版本的Spring Boot是否有差异,或者是否有其他依赖需要注意。 另外,用户的问题可能涉及到不同的开发环境,比如IntelliJ IDEA或Eclipse,设置文件编码的方式可能不同,需要通用一点的指导。还有,如果在配置中使用中文,可能需要在代码中获取这些属性时也确保编码正确,不过这可能已经由Spring处理了,只要读取时正确解码。 需要验证这些方法的有效性,比如测试修改后的配置是否真的正确显示中文。可能需要用户检查应用启动后的日志输出,或者实际使用这些配置的地方是否正常。 最后,生成的相关问题要围绕这个主题,比如乱码原因、YAML配置、验证方法、IDE设置影响等,帮助用户全面理解问题。</think>### 解决Spring Boot application.properties中文乱码问题 #### 1. 修改文件编码格式 - **步骤**:将`application.properties`文件保存为UTF-8编码格式 - **IDE操作示例**(以IntelliJ为例): 1. 右键文件 → File Encoding → 选择UTF-8 2. 勾选"Transparent native-to-ascii conversion" 3. 重启IDE使配置生效 #### 2. 使用Unicode转义字符 对于已存在的中文字符,可通过工具转换为Unicode转义序列: ```properties # 示例:中文值转换为\u格式 spring.datasource.username=\u7528\u6237\u540d ``` #### 3. 改用YAML配置文件(推荐) YAML格式默认支持UTF-8编码: 1. 创建`application.yml`文件 2. 迁移原有配置: ```yaml server: port: 8080 servlet: encoding: charset: UTF-8 force: true ``` #### 4. 自定义PropertySource配置 在启动类添加编码配置: ```java @SpringBootApplication public class Application { public static void main(String[] args) { new SpringApplicationBuilder(Application.class) .properties("spring.config.location=classpath:/application.properties") .properties("spring.config.encoding=UTF-8") .run(args); } } ``` #### 验证配置有效性 ```java @Value("${custom.chinese.value}") private String chineseValue; @PostConstruct public void checkEncoding() { System.out.println("中文值验证:" + chineseValue); } ``` ### 常见问题排查 1. **文件编码不一致**:确认IDE/文本编辑器与文件实际编码一致 2. **未清理编译缓存**:执行`mvn clean`或删除`target/`目录 3. **HTTP响应编码未配置**: ```properties spring.http.encoding.charset=UTF-8 spring.http.encoding.enabled=true spring.http.encoding.force=true ``` ### 扩展建议 - 使用`@ConfigurationProperties`注解绑定配置类时,确保字段编码一致性 - 在Docker部署时,添加环境变量`-Dfile.encoding=UTF-8`
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值