码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2019-02-01 18:04:53      阅读:241      评论:0      收藏:0      [点我收藏+]

标签:解释   div   小例子   pytho   存在   字符   shell   自己的   blog   

定义
BOM(Byte Order Mark),字节顺序标记,出现在文本文件头部,Unicode编码标准中用于标识文件是采用哪种格式的编码。
 
 
介绍
UTF-8 不需要 BOM,尽管 Unicode 标准允许在 UTF-8 中使用 BOM。但不含 BOM 的 UTF-8 才是标准形式,在 UTF-8 文件中放置 BOM 主要是微软的习惯(顺便提一下:把带有 BOM 的小端序 UTF-16 称作「Unicode」而又不详细说明,这也是微软的习惯)。
「UTF-8」和「带 BOM 的 UTF-8」的区别就是有没有 BOM。即文件开头有没有 U+FEFF。
UTF-8 的网页代码不应使用 BOM,否则常常会出错。
这是一个小例子: [为什么这个网页代码内的信息会被浏览器理解为在内?]
 
 
为什么BOM不受欢迎
BOM不受欢迎主要是在UNIX环境下,因为很多UNIX程序不鸟BOM。主要问题出在UNIX那个所有脚本语言通行的首行#!标示,这东西依赖于shell解析,而很多shell出于兼容的考虑不检测BOM,所以加进BOM时shell会把它解释为某个普通字符输入导致破坏#!标示,这就麻烦了。其实很多现代脚本语言,比如Python,其解释器本身都是能处理BOM的,但是shell卡在这里,没办法,只能躺着也中枪。说起来这也不能怪shell,因为BOM本身违反了一个UNIX设计的常见原则,就是文档中存在的数据必须可见。BOM不能作为可见字符被文本编辑器编辑,就这一条很多UNIX开发者就不满意。
顺便说一句,即使脚本语言能处理BOM,随处使用BOM也不是推荐的办法。各个脚本语言对Unicode的处理都有自己的一套,Python的 # -- coding: utf-8 --,Perl的use utf8,都比BOM简单而且可靠。另一个好消息是,即使是必须在Windows和UNIX之间切换的朋友也不会悲催。幸亏在UNIX环境下我们还有VIM这种神器,即使遇到BOM挡道,我们也可以通过 set nobomb; set fileencoding=utf8; w 三条命令解决问题。
最后回头想想,似乎也真就只有Windows坚持用BOM了。
 
所以
Windows 该死的记事本有个臭名昭著的破毛病就是在 UTF-8 文件开头加 BOM,所以不要用记事本来编辑文件。
---------------------
作者:绯浅yousa
来源:CSDN
原文:https://blog.csdn.net/qq_15437667/article/details/52706217
版权声明:本文为博主原创文章,转载请附上博文链接!

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

标签:解释   div   小例子   pytho   存在   字符   shell   自己的   blog   

原文地址:https://www.cnblogs.com/bravesunforever/p/10346441.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!