原文鏈接: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