你所不知道 ❌ BOM

前言

在本身的记忆中,在开始开发前,得对编辑器进行设置。git

  • 设置缩进为 tab 或者 空格
  • 设置缩进长度为 2 或者 4
  • 设置编码为 UTF-8
  • 设置编辑器不添加 BOM

可是一直不知道什么是 BOM 头,此次在开发过程当中,硬生生的踩了一个坑。github

小剧场

小四小二 这边为何会出错呢?明明就没有输出,也没有空格,但是确显示由于代码以前输出了某种奇怪的东西。
小二 :啊咧咧?这么惊悚?是否是电脑进贞子了?
小四 :ヾ(。`Д´。) 不是吧?怎么办,我怕怕!
小二 :嘿嘿,骗你的啦。你看看是否是由于 BOM 的缘由?
小四 :啊咧咧?什么是 BOM
小二 :那让我来给你解释解释吧。shell

概念

字符编码一直是 代码世界 经常会遇到的坑。其中,有个坑的名字就叫作 BOM (Byte Order Mark,字节顺序标签)。微信

BOM 用来标识 Unicode编码 是使用 UTF-8 仍是 UTF-16 等。它会在文件前添加 三字节 的内容,来标识本身的字符编码。编辑器

就比如彩色笔,咱们不用看笔上的内容,经过外观的颜色就能判断出这根笔是什么颜色。在解释文件的时候若是看到,BOM 头就能肯定这个文件的 Unicode 编码类型。工具

例如:编码

# UTF-8 开头会添加 `0xEF 0xBB 0xBF`

那你们可能会问?那这样子有什么错的吗?其实,BOM 也是 Unicode 编码的一部分。在 Window 上对 BOM 处理比较好。可是,在 Unix 上就没有被实现。(了解 shell 的人可能会知道 #! 出如今首行用于表示自动解释脚本。shell 出于兼容的目的,就没有对 BOM 做解释)。spa

场景

基本上只有 Windows 在支持 BOM 了,因此场景也很固定。命令行

  • 在文本编辑器中,字符编码不当心设置成了带 BOM 头。
  • 在记事本里编辑代码(应该大多数人不会这么干吧)。
  • 用记事本打开文件。
  • 同步代码库。

解决方法

Linux 命令行

查找含 BOM 头的文件code

grep -r -I -l $'^\xEF\xBB\xBF' ./

删除文件中的 BOM

find . -type f -exec sed -i 's/\xEF\xBB\xBF//' {} \;
Windows

使用 editplus

  • 运行 Editplus
  • 点击 工具
  • 选择 首选项
  • 选中 文件
  • 选择 UTF-8 标识选择,老是删除签名
  • 保存文件

总结

其实这个场景是出如今咱们产品上线的时候,小伙伴不当心把带有 BOM 头的文件给同步到代码库中了。因此,在多人协做开发下,要 注意 监控和规范,才不会在上线的时候出现问题。

一块儿成长

在困惑的城市里总少不了并肩同行的 伙伴 让咱们一块儿成长。
  • 若是您想让更多人看到文章能够点个 点赞
  • 若是您想激励小二能够到 Github 给个 小星星
  • 若是您想与小二更多交流添加微信 m353839115

微信公众号

本文原稿来自 PushMeTop
相关文章
相关标签/搜索