IDEA中properties文件的 Transparent n

2020-05-09  本文已影响0人  alonwang

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文件

上一篇下一篇

猜你喜欢

热点阅读