为什么文本文件编码仍然是 ANSI,而在我指定它是 UTF-8 的 Java 代码中

我正在使用 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 代码还是记事本。


感谢您的帮助。


万千封印
浏览 247回答 1
1回答

守着一只汪

Unicode是US-ASCII字符集的超集,UTF-8是8位US-ASCII字符编码的超集没有ANSI 编码这样的东西。可能的意思是US-ASCII。并且每个 8 位 US-ASCII 文件也是一个 UTF-8 文件。Unicode 是 US-ASCII 的超集。当使用八位字节写出时,ASCII 文件是UTF-8 文件。UTF-8 编码是故意以这种方式设计的,以便兼容。US-ASCII 是一个 7 位字符集,只有 128 个字符,编号为 0-127。因此,如果使用八位字节(8 位)编写,则每个八位字节的第一位都是零。没有文件元数据了解 US-ASCII 文件和 UTF-8 文件(没有 BOM )都只是一堆位,没有元数据。不幸的是,计算机行业从未设法为文件系统元数据建立标准。因此应用程序必须猜测内容的内容,或者用户必须指明预期的格式。您的文本编辑器可能会查看在您的文件中找到的字符域,然后尝试使用尽可能小的范围编码来保守地标记文件。如果只有 US-ASCII 字符,则标记为 US-ASCII(显然误报为“ANSI”)。一旦您添加代码点超出 ASCII 代码点的更高编号的字符,然后标记为 UTF-8。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java