用Java编写UTF-8文件

Write UTF-8 file in Java

本问题已经有最佳答案,请猛点这里访问。

当我用 Java 创建一个 UTF-8 编码的文件,然后我在记事本或记事本中打开它时,它说它是 ANSI 编码的。怎么来的?

1
2
3
4
5
6
7
File file = new File("path\\to\\file");
file.createNewFile();
Writer writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), StandardCharsets.UTF_8));

writer.write("something");
writer.flush();
writer.close();

如果我写一些特殊字符,比如??。 ??或 ?... 到文件,然后记事本说它是 UTF-8 编码的。这是为什么?

如果不包含特殊字符,ANSI 和 UTF-8 字节表示是否相同?


UTF-8 和 ANSI 对前 127 个字符 [1] 具有类似的字节编码。所以如果你不使用任何其他字符,就没有办法区分。

告诉它是 UTF-8 的唯一方法是添加一个字节顺序标记,这是一组特殊制作的字节,用于标记文件的编码:

BOM 的 UTF-8 表示是字节序列 0xEF,0xBB,0xBF

[1] Unicode 字符 U 0000..U 007F,以 UTF-8 和 ASCII 二进制表示为一个字节,最高位为 0。