转自:http://blog.csdn.net/fanpei_moukoy/article/details/21464305

UTF-8 不需要 BOM,尽管 Unicode 标准允许在 UTF-8 中使用 BOM。所以不含 BOM 的 UTF-8 才是标准形式,在 UTF-8 文件中放置 BOM 主要是微软的习惯(顺便提一下:把带有 BOM 的小端序 UTF-16 称作「Unicode」而又不详细说明,这也是微软的习惯)。

什么是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-带还是不带?相关推荐

  1. java web 默认页面配置文件_Tomcat中配置全局的错误页面(如404)+删除Tomcat中webapps目录下的自带项目,防止Tomcat默认文件泄露...

    进入tomcat目录中conf文件编辑web.xml,将下面代码复制到文件末尾,如下 400 /error.html 404 /404/404.html 500 /404/500.html 2.添加4 ...

  2. c#在WinForm中重写ProgressBar控件(带%的显示)

    c#在WinForm中重写ProgressBar控件(带%的显示) 2009-05-14 13:13 #region 定义textProgressBar控件的类 namespace csPublish ...

  3. linux 构造函数 throw,在自定义异常的方法/构造函数签名中带和不带throw()的C++...

    我是C++的初学者,因此对这个愚蠢的问题表示歉意.我在这里发布它,因为我无法在stackoverflow上找到类似的答案.在自定义异常的方法/构造函数签名中带和不带throw()的C++ 我是通过在C ...

  4. python的re模块是自带的吗_python内置模块手册 python中的re模块是自带的吗

    python3有哪些内置模块 python内置模块无法调用,pycharm环境,怎么办 python内置模块无法调用,pycharm环境是设置错误造成的,解决方法为: 点击左上角的file菜单 在下拉 ...

  5. js的json php无法json_decode,PHP中遇到BOM、 编码导致json_decode函数无法解析问题

    昨天同事遇到一个奇怪的问题,就是以下代码,无法通过JSON校验,也无法通过PHP的json_decode函数解析. 复制代码 代码如下: [ { "title": "& ...

  6. 操作系统中 完成时间,周转时间,带权周转时间和到达时间,服务时间是什么关系,怎么算

    作业调度算法–先来先服务 要算第i个的时间: step1:找出最先到达的进程(该进程的完成时间=到达时间+服务时间): step2 : 根据给出的到达时间,找出下一个到达的进程 1.上一进程的完成时间 ...

  7. matlab二重指针,VC++中函数返回数组指针或者带指针的结构体的编译方式是否可取? - 程序语言 - 小木虫 - 学术 科研 互动社区...

    libralibra 构造函数+析构函数应该是比较正规的做法吧, 你的结构体/类被提早释放的问题,是不是那个结构体是局部变量,当超出作用域时对象被销毁,如果存在析构函数,会被默认调用, 如果你返回结构 ...

  8. SOLIDWORKS Composer如何在视图中添加BOM

    SOLIDWORKS Composer可以直接从其他格式的3D数据导入至软件中,部分3D格式的元属性也可以直接导入至Composer中.这些元属性可以直接在后续的BOM.标签使用,让内容制作可以节省很 ...

  9. Word中如何制作某条线带颜色的表格

    Word中如何制作某条线带颜色的表格 更新历史 20210816: 首次发布 在Word中,可以方便地插入表格.那么,要如何制作出下图所示的.某条线带颜色的表格呢? 注:本文截图所用的word,版本为 ...

  10. PLM中的BOM定义和BOM知识介绍

    BOM是企业信息化建设的管理核心,是任何管理系统中的基础,是贯穿各信息系统的主线,BOM管理是企业技术管理信息化的主要内容,许多企业对BOM的认识不够,有些企业甚至在选型中连BOM是何含义都不理解,所 ...

最新文章

  1. ActiveState Komodo IDE v5.2.1.34168 最新版for Linux/Mac OS/Windows 全5大平台
  2. 【项目实战课】基于Pytorch的Pix2Pix黑白图片上色实战
  3. svn数据仓库配置,权限配置
  4. 递推——覆盖墙壁(洛谷 P1990)
  5. 【LeetCode 剑指offer刷题】字符串题3:Reverse String
  6. 【LeetCode】【数组】题号:59,螺旋数组2
  7. 基于Java的中华文化传播系统(含数据库文档)
  8. Linux入门-网络实验3.3
  9. java实体类属性比较_实体类之间属性对比的方法
  10. 程序员应该怎么学数学
  11. excel模板 基金账本_专项基金拨款记录EXCEL图表
  12. 陕西中医药有计算机系吗,校内制度 - 陕西中医药大学信息化建设管理处
  13. 方正税控计算机配置,方正计算机U盘启动优先级的BIOS设置说明_IT /计算机_信息...
  14. 运营商线路细分_国内三大运营商宽带线路及分级介绍
  15. 制作u盘winpe启动盘_U盘启动盘制作失败怎么办 U盘启动盘制作失败解决方法【详解】...
  16. CSDN【精品专栏】第29期
  17. cocos creator 优量汇广告接入
  18. Go语言核心之美-必读
  19. 卐 4-3D图形的数学
  20. 华为云NP考试题库_华为云服务考试 华为云hcip认证试题

热门文章

  1. windows7 python 指定源组播 10049_Python3组播通信编程实现教程(发送者+接收者)
  2. zincrby redis python_【Redis数据结构 序】使用redis-py操作Redis数据库
  3. JAVA入门级教学之(连接运算符)
  4. 爬虫 页面元素变化_爬虫 基本知识 萌新
  5. dosbox edit.exe 如何使用_宅家30天,2万字节java高级工程师面试题解析,如何斩获阿里p7...
  6. win10去掉快捷方式小箭头_简单几步,教你怎么去掉win10电脑图标小箭头
  7. lstm原文_LSTM模型与水文模型在径流模拟中的比较
  8. lptv自建服务器,如何搭建自己的IPTV平台
  9. matlab 数字调制函数,matlab用于数字调制,几个函数的使用问题
  10. python找出在原图中的位置_Python 通过截图匹配原图中的位置(opencv)实例