Java中properties文件编码问题
问题一:properties文件显示乱码
原因是因为properties默认使用ASCII码,就算在文件中填写了中文,再打开后依然会转换成ASCII码的形式。
解决这个问题的办法很简单,设置IDE的properties文件的编码方式为UTF-8即可,以IDEA为例:
大家看到,这里不但设置了编码格式为UTF-8,旁边还有Transparent native-to-ascii conversion选项(eclipse里面没有),这个东西有啥作用呢,这里先挖个坑,一会儿再填。此时咱们不勾选这个选项。
设置文件编码后之前的内容就全部乱码了,需要重新填写内容,这个解决了properties文件显示乱码的问题。
问题二:Java读取properties文件乱码
设置完properties文件编码格式为UTF-8后,一般我们通过字节流读取properties文件的方式会乱码:
public void TestProp1() throws IOException {
Properties properties = new Properties();
InputStream in = Thread.currentThread().getContextClassLoader()
.getResourceAsStream("application.properties");
properties.load(in);
System.out.println(properties.getProperty("yaml.name"));
}
解决办法就是通过字符流的方式读取properties文件:
public void TestProp() throws IOException {
Properties properties = new Properties();
InputStream in = Thread.currentThread().getContextClassLoader()
.getResourceAsStream("application.properties");
properties.load(new InputStreamReader(in, "UTF-8"));
System.out.println(properties.getProperty("yaml.name"));
}
问题三:Spring boot的@ConfigurationProperties读取properties文件乱码
解决的办法目前有三种:
方法一:使用yml文件
我在网上查询时有人说这个办法不行,说yml依然会解析成properties文件来读取,反正我的验证结果是没问题的,这里不做太多讨论
方法二:设置Transparent native-to-ascii conversion
这里填之前的坑,在IDEA勾选这个选项的作用就是:展示为UTF-8格式,但是运行时转换成ASCII的形式,实际上使用的是native2ascii.exe来进行转换。图一是IDEA中填写的,图二是实际打开时的内容
当然,如果我们用的eclipse没有这个选项的话可以用native2ascii.exe,或者是下相关插件,但是都太鸡肋了
是否有@ConfigurationProperties直接读取UTF-8不乱码的方法呢?
方法三:添加注解@PropertySource并声明encoding="UTF-8"
//加注解
@Component
@ConfigurationProperties(prefix = "yaml")
@PropertySource(value = {"classpath:yaml.properties"}, encoding = "UTF-8")
但是这里有个坑
但是这里有个坑
但是这里有个坑
这种方法只能对自定义的properties文件有效,对于spring boot默认生成的application.properties没有效果
具体原因我也不知,希望知道的大拿留言告知
下一篇: Feign远程调用
推荐阅读
-
解决: java.io.IOException: 打开的文件过多 的问题
-
sublime text2 保存php文件提示“无法启动此程序,因为计算机中丢失php_pdo.dll 尝试重新安装该程序以解决此有关问题”
-
解决Java Web开发中Jsp存储读取MySQL数据中文乱码的问题
-
redis/分布式文件存储系统/数据库 存储session,解决负载均衡集群中session不一致问题
-
浏览器访问linux服务器上tomcat中的pdf文件时报404,无法访问的问题
-
解决:js中改完文件页面中的代码却不同步问题。
-
关于PHP中Session文件过多的问题,
-
html - mysql中的这个utf8_general_ci是否就对应php文档的UTF-8 是否就是文件格式的utf-8无BOM编码?
-
PHP程序开发中的中文编码问题_PHP教程
-
python中判断文件编码的chardet(实例讲解)