一.application.properties中文乱码问题来源
Spring Boot 项目,在默认的配置文件application.properties中配置了中文的值。导致应用系统中读取出来的中文值乱码。
二.网络流传解决办法
idea中的操作是:
IDEA中设置 File Encodings
的Transparent 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码,在其他环境也方便修改。
原创文章,作者:1402239773,如若转载,请注明出处:https://blog.ytso.com/243602.html