idea Transparent-native-to-ascii 是否需要勾选?
首先看一下官方对该选项的解释:
第一段是说标准的Java api是用ISO 8859-1
编码.properties
文件的,所以如果你在properties文件中可以使用转义序列表示没在这个编码中定义的字符。或者,你可以在项目级别定义properties的默认编码方式,不使用java默认的api编码方式读取properties文件而使用自己定义的编码方式。
第二段是说将那些没有在ISO 8859-1
中定义的字符使用转义字符替代。(透明的将本地字符转换成ascii码进行转义)
首先需要了解的是,将文件保存到磁盘需要编码
过程,将文件读取到程序中需要解码
过程,假设我们使用utf-8格式保存文件,如果不勾选Transparent-native-to-ascii
,表示自己的properties文件中的一些特殊字符(比如中文,a=中文)在被java api默认的方式加载时(properties.load(fis)),可能会乱码,因为默认是使用ISO 8859-1
解码,该编码方式是无法解码中文的。此时有两种解决方案,可以保证自己获取到的属性值不是乱码:
- 勾选
Transparent-native-to-ascii
,idea会默认将输入的特殊字符进行转义,每个特殊字符都是用\uxxxx
表示,此时再被ISO 8859-1
读取时就会通过转义获取到字符真正的含义,虽然被转义了,但是我们在idea里面看到的还是我们认识的字符而不是\uxxxx
,这是idea自动完成的工作(即transparent 对用户透明) - 继续不勾选,在加载properties文件时,使用自己定义的编码方式加载,比如utf-8,此时java api可以这样写
properties.load(new FileReader("gbk.properties", StandardCharsets.UTF_8))
,此时idea没有对特殊字符进行转义,但是自己读取的时候指定了和编码的时候同样的编码方式utf-8进行解码,所以对于特殊字符也不会读错。
如果勾选了,又使用了写时的编码读取了,特殊字符也不会读错,不管什么编码方式,在读取转义字符时都不会读错,因为使用转义字符可以表示世界上任何一个字符(unicode编码)
总结:
- 一般使用中文值的时候,在读取配置文件时一定要按写入的编码方式读取(一般都是utf8),避免编码问题造成乱码,此时勾不勾选都无所谓
- 如果是团队协作,一个人勾选了,保存了properties文件,别人在获取到这个properties文件时如果自己没有勾选中文都会显示转义编码
\uxxxx
(idea没有透明处理)。如果是勾选的人获取到没有勾选的人写的properties文件,显示没有什么问题,之后如果再进行保存的话,后续没有勾选的人获取到还会是\uxxxx
。所以如果勾选,团队协作时最好都要勾选。
注意:如果勾选了,在将该文件放在linux系统上的时候,中文都会显示\uxxxx
,因为idea帮你透明的处理的转义字符,linux不会,所以为了在linux上保证中文不乱码,我选择不勾选,并且在使用配置文件时,使用指定编码进行读取保证不乱码。
本文来自博客园,作者:Bingmous,转载请注明原文链接:https://www.cnblogs.com/bingmous/p/15957279.html