eclipse 编码设置之BOM丢失

来源:互联网 发布:我的女友是警花知君 编辑:程序博客网 时间:2024/06/15 18:10

为了正确显示汉字(2字节汉字和4字节汉字)

eclipse 能设置编码的地方真多

1 window/preferences/general/workspace/Text file encoding

2 window/preferences/general/content types

3 project/property/resource/text file encoding

4 edit/set encoding

5 file/properties/resource/text file encoding

 

设置eclipse 使用UTF-8的方法:

 1中,选择UTF-8

 2 中,在右侧content types里,选text/java source type,在default encoding 中,填入utf-8,然后update

以后新建的.java文件都是UTF-8编码

 

但是,这种文件开头是没有BOM的。 

所以选择UTF8,若是unicode-little-endian或unicode-big-endian 在需要BOM的软件中会有乱码。

 

unicode-big-endian(或unicode-little-endian)

如果先用 记事本 保存为unicode big endian,则文件开头有BOM:FE FF,也可以用eclipse 打开,set encoding 要选择UTF-16,而不能选UTF-16BE或UTF-16LE,否则运行会有错误。

UTF-16BE或UTF-16LE 是为没有BOM的文件准备的,如eclipse 自己保存的unicode big endian/unicode little endian 文件。 

 

BOM —— Byte Order Mark,字节顺序标记

  在UCS 编码中有一个叫做 "Zero Width No-Break Space" ,中文译名作“零宽无间断间隔”的字符,它的编码是 FEFF。而 FFFE 在 UCS 中是不存在的字符,所以不应该出现在实际传输中。UCS 规范建议我们在传输字节流前,先传输字符 "Zero Width No-Break Space"。这样如果接收者收到 FEFF,就表明这个字节流是 Big-Endian 的;如果收到FFFE,就表明这个字节流是 Little- Endian 的。因此字符 "Zero Width No-Break Space" (“零宽无间断间隔”)又被称作 BOM。

  UTF-8 不需要 BOM 来表明字节顺序,但可以用 BOM 来表明编码方式。字符 "Zero Width No-Break Space" 的 UTF-8 编码是 EF BB BF。所以如果接收者收到以 EF BB BF 开头的字节流,就知道这是 UTF-8编码了。Windows 就是使用 BOM 来标记文本文件的编码方式的。