美文网首页
IDEA中properties文件的 Transparent n

IDEA中properties文件的 Transparent n

作者: alonwang | 来源:发表于2020-05-09 20:24 被阅读0次

    IDEA中,对properties文件的显示有一项功能 Transparent native-to-ascii conversion
    在我的理解中,这个功能是为了解决非英文体系乱码问题,举个例子,以GBK编码方式写入properties文件

    abc=中国
    

    如果以UTF-8编码方式去读取,肯定会出现乱码

    abc=�й�
    

    而 Transparent native-to-ascii conversion分为两个功能点

    1. 在检测到当前编码方式是UTF-8,而properties文件的编码方式时GBK时,会将"中国"转换为对应的Unicode编码\u4e2d\u56fd
    2. 以UTF-8方式读取时,如果发现形如\u4e2d\u56fd这样的Unicode编码,就将其转换为对应的符号展示. 所以如果没有开启功能,展示的会是
    abc=\u4e2d\u56fd
    

    开启之后,展示的会是

    abc=中国
    

    大部分乱码都是字符编码方式字符集不匹配,关于字符集和字符编码方式请看阮一峰老师的这篇文章

    附赠一个代码示例

        public static void main(String[] args) throws IOException {
            //以GBK编码写入内容
            File file = FileUtil.newFile("test1.properties");
            BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), "GBK"));
            String s = "abc=中国";
            writer.write(s);
            writer.flush();
            writer.close();
            //以 UTF-8编码读取内容
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(file), StandardCharsets.UTF_8));
            String str = bufferedReader.readLine();
            System.out.println(str);
            bufferedReader.close();
    
            //以GBK编码写入内容
            file = FileUtil.newFile("test2.properties");
            writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), "GBK"));
            //GB2312字符集的字符"中国"转换为unicode字符集在java中的表示是 "\u4e2d\u56fd"
            s = "abc=\\u4e2d\\u56fd";
            writer.write(s);
            writer.flush();
            writer.close();
            //以 UTF-8格式读取内容
            bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(file), StandardCharsets.UTF_8));
            str = bufferedReader.readLine();
            System.out.println(str);
            bufferedReader.close();
        }
    

    输出

    //以GBK编码写入中文内容,UTF-8读取.
    abc=�й�
    //以GBK编码写入unicode内容,UTF-8读取.
    abc=\u4e2d\u56fd
    

    在IDEA中点开properties文件时,IDEA会检测它的编码,如果和当前编码不符,会直接将文件编码转换为当前编码. 如果你是用GBK建了一个properties文件,之后又将项目properties的默认编码改为UTF-8,并且没有开启 Transparent native-to-ascii,再次打开后你会得到一个乱码的UTF-8编码的properties文件

    相关文章

      网友评论

          本文标题:IDEA中properties文件的 Transparent n

          本文链接:https://www.haomeiwen.com/subject/buzfnhtx.html