我正在使用 FileWriter 对象将一些文本写入文件。我指定我希望输出采用 UTF-8 格式,但是当我打开文本文件并另存为时,我看到它采用 ANSI 编码。
我还想补充一点,当存在标准 ascii 字符集以外的字符(例如:- 日语字符)时,文件编码为 UTF-8,但如果没有,则文本文件编码为 ANSI。
File json_file= new File(path);
FileWriter json_file_output=newFileWriter(json_file,StandardCharsets.UTF_8);
json_file_output.write("SOME JSON TEXT HERE");
json_file_output.flush();
我不确定这是由于java代码还是记事本引起的。
感谢您的帮助。
最佳答案
Unicode 是 US-ASCII 字符集的超集,
UTF-8 是 8 位 US-ASCII 字符编码的超集
不存在 ANSI encoding 这样的东西。请参阅What is ANSI format? .
可能的意思是US-ASCII 。 每个 8 位 US-ASCII 文件也是一个 UTF-8 文件。 Unicode 是 US-ASCII 的超集。当使用八位字节写出时,ASCII 文件是 UTF-8 文件。 UTF-8 编码是故意这样设计的,是为了兼容。
US-ASCII 是一个 7 位字符集,只有 128 个字符,编号为 0-127。因此,如果使用 octets 编写( 8-bits ),每个八位字节的第一位都是零。请参阅Wikipedia page on UTF-8 encoding ,并注意第一位所扮演的角色。
没有文件元数据
了解 US-ASCII 文件和 UTF-8 文件(没有 BOM )只是一堆位,没有元数据。不幸的是,计算机行业从未成功建立文件系统元数据的标准。因此应用程序必须猜测内容的内容,或者用户必须指示预期的格式。
您的文本编辑器可能会查看文件中找到的字符域,然后尝试使用尽可能最小范围的编码来保守地标记文件。如果只有 US-ASCII 字符,则标记为 US-ASCII(并且显然误报为“ANSI”)。一旦添加了代码点超出 ASCII 的更高编号的字符,就标记为 UTF-8。
<小时/>有关背景信息,例如字符集和字符编码之间的区别,请参阅:The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)
关于java - 当我在java代码中指定它是UTF-8时,为什么文本文件编码仍然是ANSI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57447896/