首页> 文章> 详情

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

教程分享 > Java教程 (7822) 2024-07-19 16:29:30

一.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码,在其他环境也方便修改。


 

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框架的Spring Boot 中的Spring Boot Actuator变化讲解。并且了解如何在Spring Boot 2.0中使用Actuator...
Spring Boot 2.0 有哪些新特性_Spring Boot 2.0新功能,在本文中,我们将探讨为Spring Boot 2.0计划的一些更改和功能。我们还会描述这些变化如何帮助我们提高...
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") 注解格式化日期失效原因及解决。
本文将介绍Spring Boot和HikariCP示例。HikariCP是快速,简单,可靠和生产就绪的JDBC连接池。在Spring Boot 2.0版本中,默认数据库池技术已从Tomcat P...
spring boot 2.0 入门之单元测试多线程。spring boot 2.0 项目含多线程异步处理业务单元测试执行主线程结束不等待子线程结束。
Spring Boot 2.0 入门 logoback配置实战教程,俗话说好马配好鞍。Spring Boot 框架从各方面给我们带来了开发效率。日志自然也不会落下。本文将讲解与Spring Bo...
学习使用Java配置创建Spring批处理作业(具有多个步骤)。 它使用Spring Boot 2,Spring batch 4和H2数据库来执行批处理作业。