【问题标题】:Why is text file encoding still ANSI when in the java code i am specifying it be UTF-8为什么在我指定它为 UTF-8 的 java 代码中文本文件编码仍然是 ANSI
【发布时间】:2023-04-03 22:15:01
【问题描述】:

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

感谢您的帮助。

【问题讨论】:

  • 文本 SOME JSON TEXT HERE 在 UTF-8 和 ASCII 中编码相同。向我们展示您的真实输入和结果。
  • 记事本会自动检测编码吗?
  • 我认为这是您的记事本问题(可能默认为 ASCII 码)。我用非 ascii (x√ab c) 字符运行代码,文件写入正确。
  • 我知道它会正确写入所有字符,但输出中只有 ascii 字符,当我看到“另存为”时,编码是 ANSI,尽管我指定输出为 Unicode。跨度>
  • 这只是记事本的行为。您正在写出 UTF-8。试着用非 ASCII 字符写出文本,你会看到的。每个只包含 ASCII 字符的文件,无论是用 ASCII 编码还是 UTF-8 编码,都是一样的。

标签: java


【解决方案1】:

没有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。因此,如果使用八位字节(8 位)编写,每个八位字节的第一位都是零。请参阅Wikipedia page on UTF-8 encoding,并注意第一位所起的作用。

您的文本编辑器可能会查看在您的文件中找到的字符域,然后尝试在使用可能的最小范围编码标记文件时保持保守。如果只有 US-ASCII 字符,则标记为 US-ASCII(并且显然误报为“ANSI”)。一旦您添加了代码点超出 ASCII 的更高编号的字符,则将其标记为 UTF-8。

【讨论】:

  • 在 Windows 中,“ANSI 编码”是a real thing:从几种标准字符编码(ANSI 和/或 IANA 或其他)中选择的字符编码。而且几乎可以肯定不是 US-ASCII。
猜你喜欢
  • 2014-02-17
  • 1970-01-01
  • 2011-03-01
  • 1970-01-01
  • 2010-09-24
  • 2017-05-10
  • 2015-12-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多