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

为什么在java代码中我指定文本文件编码为UTF-8时,它仍然是ANSI,java,Java,我正在使用FileWriter对象将一些文本写入文件。我指定希望输出为UTF-8格式,但是当我打开文本文件并转到“另存为”时,我看到它是ANSI编码的 我还想补充一点,当存在标准ascii字符集以外的字符(例如:-japansese字符)时,文件编码为UTF-8,但如果没有,则文本文件编码为ANSI File json_file= new File(path); FileWriter json_file_output=newFileWriter(json_file,StandardCharset

我正在使用FileWriter对象将一些文本写入文件。我指定希望输出为UTF-8格式,但是当我打开文本文件并转到“另存为”时,我看到它是ANSI编码的

我还想补充一点,当存在标准ascii字符集以外的字符(例如:-japansese字符)时,文件编码为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代码还是记事本

谢谢你的帮助。

世上没有这样的事。看

很可能这意味着什么。而且每个8位US-ASCII文件也是一个UTF-8文件。Unicode是US-ASCII的超集。使用八位字节写入时,ASCII文件是UTF-8文件。UTF-8编码就是这样设计的,目的是为了兼容

US-ASCII是一个7位字符集,只有128个字符,编号为0-127。因此,如果使用八位字节(8位)写入,则每个八位字节的第一位为零。请参见,并注意第一位所扮演的角色

您的文本编辑器可能会查看文件中的字符域,然后尝试使用尽可能小的范围编码对文件进行有帮助的保守标记。如果只有US-ASCII字符,则标签为US-ASCII(显然错误地将其称为“ANSI”)。一旦您添加了编号较高的字符,其代码点超过ASCII,则标签为UTF-8

世上没有这样的东西。看

很可能这意味着什么。而且每个8位US-ASCII文件也是一个UTF-8文件。Unicode是US-ASCII的超集。使用八位字节写入时,ASCII文件是UTF-8文件。UTF-8编码就是这样设计的,目的是为了兼容

US-ASCII是一个7位字符集,只有128个字符,编号为0-127。因此,如果使用八位字节(8位)写入,则每个八位字节的第一位为零。请参见,并注意第一位所扮演的角色


您的文本编辑器可能会查看文件中的字符域,然后尝试使用尽可能小的范围编码对文件进行有帮助的保守标记。如果只有US-ASCII字符,则标签为US-ASCII(显然错误地将其称为“ANSI”)。一旦您添加了编号较高的字符,其代码点超过ASCII,则标签为UTF-8

文本
此处的一些JSON文本
在UTF-8和ASCII中编码相同。向我们显示您的真实输入和结果。记事本是否自动检测编码?我认为这是您的记事本问题(可能默认为ASCII码)。我用非ascii(
x)运行代码√ab c
)字符,文件写入正确。我知道它会正确写入所有字符,但输出中只有ascii字符,当我看到“另存为”时,编码是ANSI,即使我指定输出为Unicode。这只是记事本的行为。你正在写UTF-8。尝试用非ASCII字符写出文本,您将看到这一点。每个仅包含ASCII字符的文件无论是用ASCII还是UTF-8编码都是相同的。此处的文本
某些JSON文本
在UTF-8和ASCII中编码相同。向我们显示您的真实输入和结果。记事本是否自动检测编码?我认为这是您的记事本问题(可能默认为ASCII码)。我用非ascii(
x)运行代码√ab c
)字符,文件写入正确。我知道它会正确写入所有字符,但输出中只有ascii字符,当我看到“另存为”时,编码是ANSI,即使我指定输出为Unicode。这只是记事本的行为。你正在写UTF-8。尝试用非ASCII字符写出文本,您将看到这一点。每个只包含ASCII字符的文件无论是用ASCII还是UTF-8编码都是相同的。在Windows中,“ANSI编码”是:从几个标准字符编码(ANSI和/或IANA或其他)中选择的字符编码。在Windows中,“ANSI编码”是:从几个标准字符编码(ANSI和/或IANA或其他)中选择的字符编码。而且几乎可以肯定的是,US-ASCII并非如此。