星期日, 4月 08, 2012

UTF-8 Byte order mark (BOM)

之前在寫rsort的時候遇到一個問題
有一次不管怎麼做,寫出的資料都比原始資料少3 byte
原來以為是程式的bug,百思不得其解

後來才發現是UTF-8 Byte order mark在作怪

可以看到兩個檔的內容看起來是一樣:





在vim中看起來也是完全一樣




但是檔案大小卻不一樣
相差了4個byte



在vim 中下
:%! xxd -b
指令後:




我們發現第二個檔案開頭多了3個byte
(結尾倒數第二個byte有多了一個\r,暫時不在討論範圍)

原因是我用了notepad++做轉成utf-8的動作
正確用法是要選「檔首無BOM」


另外有用PHP寫來去除BOM的tool

延伸閱讀:

http://mfhsieh.blogspot.com/2005/03/pda-zaurus-c760-35-utf-8-and-bom.html

沒有留言: