我正在使用 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 代码还是记事本。感谢您的帮助。
1 回答
守着一只汪
Unicode是US-ASCII字符集的超集,
TA贡献1872条经验 获得超3个赞
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。
添加回答
举报
0/150
提交
取消