Maw*_*wia 6 java unicode byte-order-mark notepad++ utf-8
这段代码,
OutputStream out = new FileOutputStream(new File("C:/file/test.txt"));
out.write("A".getBytes());
Run Code Online (Sandbox Code Playgroud)
还有这个,
OutputStream out = new FileOutputStream(new File("C:/file/test.txt"));
out.write("A".getBytes(StandardCharsets.UTF_8));
Run Code Online (Sandbox Code Playgroud)
产生相同的结果(在我看来),这是没有BOM的UTF-8.但是,Notepad ++没有显示有关编码的任何信息.我希望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());
Run Code Online (Sandbox Code Playgroud)
Notepad ++也将编码类型显示为Encode in UTF-8.
问题:前两个代码有什么问题,假设用UTF-8编写文件没有BOM?我的Java代码是做正确的吗?如果是这样,notepad ++试图检测编码类型是否有问题?
记事本++只能猜测吗?
Joa*_*uer 15
使用UTF-8而不使用BOM 编写的"A"与使用ASCII或ISO-8859-*或任何其他ASCII兼容编码编写的"A" 完全相同.该文件包含一个十进制值为65的字节.
想一想:
"A".getBytes("UTF-8") 返回一个 new byte[] { 65 }"A".getBytes("ISO-8859-1") 返回一个 new byte[] { 65 }有没有在该文件中表明,UTF-8需要被用来解码.
尝试编写"Käsekuchen"或其他不能用ASCII编码的东西,看看Notepad ++是否正确猜测编码(因为这正是它的作用:它做了一个有根据的猜测,没有元数据告诉它使用哪种编码).
| 归档时间: |
|
| 查看次数: |
21684 次 |
| 最近记录: |