java、StandardCharsets utf-16 问题

问题描述 投票:0回答:1

当我尝试使用不同的编码编写测试字符串时,我试图理解为什么结果不同。 对于 StandardCharsets.UTF_16LE 结果是“测试”(似乎是正确的),而 对于StandardCharsets.UTF_16BE,结果是“t e s t”(似乎是错误的)。 有人可以解释一下为什么在 UTF_16BE 的情况下结果是字母之间有不必要的空格吗?

    String filename="C:\\Users\\name\\Downloads\\debugging.txt";
    String str="test";

    File fl = new File(filename);

    try (FileOutputStream fos = new FileOutputStream(fl);

         //BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(fos, StandardCharsets.UTF_16LE))) {//seems does work
         BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(fos, StandardCharsets.UTF_16BE))) {//seems does not work

        bw.write(str);
    } catch (IOException ignored) {
        //some actions
    }
java encoding utf-16
1个回答
0
投票

Javadoc 说:

解码时,UTF-16BE 和 UTF-16LE 字符集解释 初始字节顺序标记为零宽度非中断空格;什么时候 编码,他们不写字节顺序标记。

如果没有 BOM,编辑人员就必须猜测正确的编码,而且他们可能不会那么聪明。某些编辑器可能根本不支持某些编码。所以这取决于您用来读取文件的编辑器。

© www.soinside.com 2019 - 2024. All rights reserved.