定义
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
版权声明:本文为博主原创文章,转载请附上博文链接!

最新文章

  1. 对C语言islower、isupper、isdigit函数的测试
  2. Linux.BackDoor.Chikdos/Elknot Attack And Defense Analysis
  3. Windbg符号与源码 《第二篇》
  4. pycharm快捷键大全
  5. HtmlAgilityPack 简单运用
  6. The architecture of LTE network.
  7. U盘安装Centos后拔除U盘无法启动问题解决方法
  8. 一天精通MongoDB数据库
  9. maven 使用 log4j
  10. Day 5-4封装.__隐藏属性或者方法
  11. Android Apk 瘦身大法
  12. 360. Sort Transformed Array二元一次方程返回大数序列
  13. eclipse:报错信息The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path
  14. laravel目录结构
  15. SQL语句大全从基础到熟练(不含数据库高端操作)日常用户 三、
  16. gradle 两种更新方法
  17. Entity Framework的基本操作
  18. Python——列表的操作
  19. 学习笔记:Tab Bar 控件使用详解
  20. APP如何发布到Google play 商店

热门文章

  1. HTTP Get Post究竟有哪些区别
  2. Python3下载图片的方法
  3. websocket作用
  4. Java 基础 IO流
  5. keras框架 反复调用model 模型 出错
  6. Vue使用Typescript开发编译时提示“ERROR in ./src/main.ts Module build failed: TypeError: Cannot read property 'afterCompile' of undefined”的解决方法
  7. db2空值、null
  8. HDU 1160
  9. html5 javascript 事件练习3键盘控制练习
  10. 记录在tiny6410平台上采用4GSD卡来启动uboot和烧写nand flash uboot