你所不知道 ❌ 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
相關文章
相關標籤/搜索