这段代码,
OutputStream out = new FileOutputStream(new File("C:/file/test.txt"));
out.write("A".getBytes());
和这个,
OutputStream out = new FileOutputStream(new File("C:/file/test.txt"));
out.write("A".getBytes(StandardCharsets.UTF_8));
产生相同的结果(在我看来),即 UTF-8 without BOM。然而,Notepad++ 不显示任何有关编码的信息。我期待记事本++在这里显示为Encode in UTF-8 without BOM
,但在“编码”菜单中未选择任何编码。
现在,此代码以带有 BOM 编码的 UTF-8 格式写入文件。
OutputStream out = new FileOutputStream(new File("C:/file/test.txt"));
byte[] bom = { (byte) 239, (byte) 187, (byte) 191 };
out.write(bom);
out.write("A".getBytes());
Notepad++ 还将编码类型显示为Encode in UTF-8
.
问题:前两个代码应该以没有 BOM 的 UTF-8 格式写入文件,这有什么问题吗?我的 Java 代码做正确的事吗?如果是这样,notepad++尝试检测编码类型是否有问题?
notepad++只是猜测吗?
使用不带 BOM 的 UTF-8 编写的“A”会生成exactly使用 ASCII 或 ISO-8859-* 或任何其他 ASCII 兼容编码编写的与“A”相同的文件。该文件包含一个十进制值为 65 的字节。
可以这样想:
-
"A".getBytes("UTF-8")
返回一个new byte[] { 65 }
-
"A".getBytes("ISO-8859-1")
返回一个new byte[] { 65 }
- 您将这些调用的结果写入文件中
- 文件的使用者应该如何区分两者?
There's nothing在该文件中,表明需要使用 UTF-8 对其进行解码。
尝试编写“Käsekuchen”或其他无法用 ASCII 编码的内容,然后查看 Notepad++ 是否正确猜测编码(因为这正是它的作用:它进行有根据的猜测,没有元数据可以预测)tells使用哪种编码)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)