idea|idea Transparent-native-to-ascii 是否需要勾选()


目录


    首先看一下官方对该选项的解释:
    idea|idea Transparent-native-to-ascii 是否需要勾选()
    文章图片

    第一段是说标准的Java api是用ISO 8859-1编码.properties文件的,所以如果你在properties文件中可以使用转义序列表示没在这个编码中定义的字符。或者,你可以在项目级别定义properties的默认编码方式,不使用java默认的api编码方式读取properties文件而使用自己定义的编码方式。
    【idea|idea Transparent-native-to-ascii 是否需要勾选()】第二段是说将那些没有在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上保证中文不乱码,我选择不勾选,并且在使用配置文件时,使用指定编码进行读取保证不乱码。

      推荐阅读