你所不知道 ❌ BOM

前言

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

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

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

小剧场

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

概念

字符编码一直是 代码世界 常常会遇到的坑。其中,有个坑的名字就叫做 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 作解释)。

场景

基本上只有 Windows 在支持 BOM 了,所以场景也很固定。

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

解决方法

Linux 命令行

查找含 BOM 头的文件

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

《你所不知道 ❌ BOM》

本文原稿来自
PushMeTop

    原文作者:zhangxiangliang
    原文地址: https://segmentfault.com/a/1190000006833935
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞