application.properties中文值乱码终极解决办法

位置:首页>文章>详情   分类: 教程分享 > Java教程   阅读(6864)   2023-03-28 11:29:14

一.application.properties中文乱码问题来源

中文乱码

Spring Boot 项目,在默认的配置文件application.properties中配置了中文的值。导致应用系统中读取出来的中文值乱码。

二.网络流传解决办法

idea中的操作是:
IDEA中设置 File EncodingsTransparent native-to-ascii conversion为true

并且前提是application.properties文件编码已经是UTF-8

实际上这种办法也只是掩耳盗铃,如果你在生产环境中改该值还是需要将中文转换为Unicode码,因为上述的办法其实就是将中文转换为Unicode码然后再在idea编辑器中转换为中文。实际存放的还是Unicode码。

三.application.properties中文乱码原因

application.properties中文乱之所以乱码是应spring boot项目默认的加载配置文件application是通过字符集ISO-8859-1载入的
 

四.application.properties中文乱码解决办法

办法一:
就是网络流传的将中文转换为Unicode码

办法二:
创建一个新的properties配置文件,文件编码格式为UTF-8
然后在spring boot项目需要使用的地方通过注解
@PropertySource(value = "classpath:test.properties",encoding = "UTF-8")
引入配置并指定字符集,然后使用的时候
 @Value("${test.cn}")
    String testCn;
下面是一个demo的两个文件
$title(test.properties)
test.cn=测试中文
$title(DemoTestApplication.java)
package com.example.demotest;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.PropertySource;

import javax.annotation.PostConstruct;

@SpringBootApplication
@PropertySource(value = "classpath:test.properties",encoding = "UTF-8")
public class DemoTestApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoTestApplication.class, args);
    }

    @Value("${test.cn}")
    String testCn;
    @PostConstruct
    public void test(){
        System.out.println("中文是否乱码呢:"+testCn);
    }

}
输出结果:
2019-04-20 10:27:21.636  INFO 16200 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.17]
2019-04-20 10:27:21.750  INFO 16200 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2019-04-20 10:27:21.750  INFO 16200 --- [           main] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 996 ms
中文是否乱码呢:测试中文
2019-04-20 10:27:21.938  INFO 16200 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
2019-04-20 10:27:22.118  INFO 16200 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2019-04-20 10:27:22.121  INFO 16200 --- [           main] c.example.demotest.DemoTestApplication   : Started DemoTestApplication in 1.863 seconds (JVM running for 4.082)
很明显没乱码了并且test.properties内配置的是实实在在的中文,非Unicode码,在其他环境也方便修改。


 
标签2: Spring Boot 2.0
地址:https://www.leftso.com/article/579.html

相关阅读

Spring Boot 2.0 Redis整合,通过spring boot 2.0整合Redis作为spring缓存框架的实现。
spring boot 2.0 security 5.0 整合,实现自定义表单登录。spring boot 2.0框架使用。
Spring Boot 2.0 有哪些新特性_Spring Boot 2.0新功能,在本文中,我们将探讨为Spring Boot 2.0计划的一些更改和功能。我们还会描述这些变化如何帮助我们提高...
Spring Boot 2.0,Spring框架的Spring Boot 中的Spring Boot Actuator变化讲解。并且了解如何在Spring Boot 2.0中使用Actuator...
Spring Boot 1.x升级到Spring Boot 2.0迁移指南
Spring Boot 2.0 绑定properties属性资源文件 Spring Boot 2.0 读取properties配置文件值 Spring Boot 2.0获取properties配...
Spring Boot 2.0 支持的Apache Camel 版本发布了_Apache Camel 2.22发布支持Spring Boot 2.0
Spring Boot 2.0 @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8") 注解格式化日期失效原因及解决。