在使用spring的@PropertySource
时,发现引入的配置出现了乱码,看到有人抠源码改写,想说一下,可以通过配置
@PropertySource(value = "classpath:/config.properties", encoding = "utf-8")
来解决,不过对于application.properties来说不生效,应该是已经在环境中了,没有再加载,其实也不用再重复加载。
另一种方案是通过勾选transparent native-to-ascii conversion配置来解决。
关于这个要不要勾选,先总结一句话:团队开发统一标准,个人开发保持习惯。
官方解释如下:
点击查看官网解释.
简单来讲,java默认采用iso8859-1
编码读取,勾选这个后,实际存储变为ASCII码字符,这样是能正常解析的;
实际效果
test.name=\u54C8\u54C8
test.number=456
显示效果
test.name=哈哈
test.number=456
这其实只是编辑器的优化而已,并非本来面目,用sublime等文本编辑器打开就能看到实际效果。
再来说properties本身的编码:
- 如果用
iso8859-1
,文本编辑器打开后中文字符乱码,读取也是乱码(这是显然的,认不出来); - 如果是
utf-8
编码,文本编辑器打开后中文字符显示正常,读取还是乱码,上面讲到了,底层读取的编码为iso8859-1
。
撇开文本编码,存储成ASCII
字符是正常的,java也会识别\uxxxx
,这也是建议勾选的原因。
对比下eclipse(oxygen):创建properties(默认iso8859-1
)后,编辑中文时也是自动转成了\uxxxx
,用utf-8
编码时,不会做自动转换。
具体方案:
- 勾选时:正常使用,IDE等提供预览支持;
- 未设置:保证读取编码正确。
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。