UTF-8中的BOM-带还是不带?
2014-03-18 15:59
92 查看
UTF-8 不需要 BOM,尽管 Unicode 标准允许在 UTF-8 中使用 BOM。所以不含 BOM 的 UTF-8 才是标准形式,在 UTF-8 文件中放置 BOM 主要是微软的习惯(顺便提一下:把带有 BOM 的小端序 UTF-16 称作「Unicode」而又不详细说明,这也是微软的习惯)。
在绝大多数编辑器中都看不到BOM字符,因为它们能理解Unicode,去掉了读取器看不到的题头信息。若要查看某个Unicode文件是否以BOM开头,可以使用十六进制编辑器。下表列出了不同编码所对应的BOM。
BOM Encoding
EF BB BF UTF-8
FE FF UTF-16 (big-endian)
FF FE UTF-16 (little-endian)
00 00 FE FF UTF-32 (big-endian)
FF FE 00 00 UTF-32 (little-endian)
Linux/UNIX 并没有使用 BOM,因为它会破坏现有的 ASCII 文件的语法约定。
注意:这里所说的带还是不带,指的是:源码字符集(the source character set)-源码文件是使用何种编码保存的;
现在linux平台下的GCC 4.6及以上的版本已经可以支持带BOM的源码了!!!!!
所以之前出现的问题也可以不用冲突,带或者不带,以后就不会成为一个问题。
什么是BOM
BOM(byte-order mark),即字节顺序标记,它是插入到以UTF-8、UTF16或UTF-32编码Unicode文件开头的特殊标记,用来识别Unicode文件的编码类型。对于UTF-8来说,BOM并不是必须的,因为BOM用来标记多字节编码文件的编码类型和字节顺序(big-endian或little-endian)。在绝大多数编辑器中都看不到BOM字符,因为它们能理解Unicode,去掉了读取器看不到的题头信息。若要查看某个Unicode文件是否以BOM开头,可以使用十六进制编辑器。下表列出了不同编码所对应的BOM。
BOM Encoding
EF BB BF UTF-8
FE FF UTF-16 (big-endian)
FF FE UTF-16 (little-endian)
00 00 FE FF UTF-32 (big-endian)
FF FE 00 00 UTF-32 (little-endian)
BOM的来历
为了识别 Unicode 文件,Microsoft 建议所有的 Unicode 文件应该以 ZERO WIDTH NOBREAK SPACE(U+FEFF)字符开头。这作为一个“特征符”或“字节顺序标记(byte-order mark,BOM)”来识别文件中使用的编码和字节顺序。Linux/UNIX 并没有使用 BOM,因为它会破坏现有的 ASCII 文件的语法约定。
带BOM和不带BOM的区别
「UTF-8」和「带 BOM 的 UTF-8」的区别就是有没有 BOM。即文件开头有没有 U+FEFF,也就是说有没有这个标记。带还是不带?
如果你的编程平台需要跨平台编译,比如,会在linux平台上编译,而不是只在windows上运行,建议不带BOM,unicode标准就是不带,带BOM毕竟那是微软的那一套,带了会出现很大的问题。反之,如果你的程序只在windows平台上编译出windows程序,这个可有可无。注意:这里所说的带还是不带,指的是:源码字符集(the source character set)-源码文件是使用何种编码保存的;
现在linux平台下的GCC 4.6及以上的版本已经可以支持带BOM的源码了!!!!!
所以之前出现的问题也可以不用冲突,带或者不带,以后就不会成为一个问题。
相关文章推荐
- UTF-8中的BOM-带还是不带?
- 字符编码笔记:ASCII、Unicode、UTF-8、UTF-16、UCS、BOM、Endian
- 确定Windows XP到底是UCS-2的还是UTF-16的
- ajax php bomt头 utf-8带来的奇怪问题。。返回值false 判断也是false 但是判断错误
- [转]谈谈Unicode编码,简要解释UCS、UTF、BMP、BOM等名词
- Utf-8+Bom编码导致的读取数据部分异常问题
- AscII,Unicode,utf-8 utf-16,utf-32,BOM 的解说(二)
- 关于UTF-8的BOM标识以及非法字符65279错误的一些记录
- Java读取UTF-8格式txt文件第一行出现乱码——问号“?”及解决;Java读带有BOM的UTF-8文件乱码原因及解决方法
- 谈谈Unicode编码,简要解释UCS、UTF、BMP、BOM等名词
- PHP批量删除、清除UTF-8文件BOM头的代码实例
- 今天被坑了,而且被坑的好爽! 该死的UTF-8 有 BOM 格式编码
- 谈谈Unicode编码,简要解释UCS、UTF、BMP、BOM等名词
- 谈谈Unicode编码,简要解释UCS、UTF、BMP、BOM等名词 ZZ
- 谈谈Unicode编码,简要解释UCS、UTF、BMP、BOM等名词
- 【转】谈谈Unicode编码,简要解释UCS、UTF、BMP、BOM等名词
- notepad++新建文件时如何设置默认编码为utf_8(无包含BOM)
- UTF-8与UTF-8无BOM 的区别(转)
- 做网站用UTF-8还是GB2312?
- PHP中file_get_contents函数获取带BOM的utf-8,然后json_decode() 返回null的问题