UTF-8文件的Unicode簽名BOM(Byte Order Mark)問題記錄(EF BB BF)

原文鏈接:https://www.cnblogs.com/Detector/p/8483010.html

背景

樓主測試的批量發送信息功能上線之後,查看後臺運行日誌,發現存在少量的ERROR日誌,提示手機號碼格式不正確。

之前沒有出現過這樣的問題,找運營要了上傳的txt發送列表,發現格式是要求的UTF-8,且號碼是符合規則的,反覆查看未發現異常。

因爲博主還有別的需求,所以直接反饋給了開發,讓開發定位。

定位過程

兩天之後,開發給了我兩個文件,問我有沒有辦法找出這兩個文件的不同。我看了一下,文件內容完全相同。

後來使用軟件beyond compare進行十六進制對比終於發現了區別,

其中一個第一行多了三個字節“EF BB BF”,如下圖

 

原因

多方查證得知是UTF-8有無BOM的區別。

BOM(Byte Order Mark),是UTF編碼方案裏用於標識編碼的標準標記,在UTF-16裏本來是FF FE,變成UTF-8就成了EF BB BF。這個標記是可選的,因爲UTF8字節沒有順序,所以它可以被用來檢測一個字節流是否是UTF-8編碼的。微軟做這種檢測,但有些軟件不做這種檢測, 而把它當作正常字符處理。

微軟在自己的UTF-8格式的文本文件之前加上了EF BB BF三個字節, windows上面的notepad等程序就是根據這三個字節來確定一個文本文件是ASCII的還是UTF-8的, 然而這個只是微軟暗自作的標記, 其它平臺上並沒有對UTF-8文本文件做個這樣的標記。

也 就是說一個UTF-8文件可能有BOM,也可能沒有BOM

解決方法

使用Notepad++編輯,轉換爲UTF-8無BOM格式即可

 

參考資料:EF BB BF

發佈了59 篇原創文章 · 獲贊 4 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章