在我們通常使用的windows系統中,我發現了一個有趣的現象。我新建一個空的文本文檔,點擊文件-另存為-編碼選擇UTF-8,然后保存。此時這個文件明明是空的,卻占了3字節大小。原因在於:此時保存的編碼方式自動會變為UTF-8 BOM
因為Unicode可以采用16位或者32位編碼,所以計算機在處理時需要知道其字節順序,BOM就是用來標識字節流的字節順序的,但字節順序這個 概念對UTF-8來說是沒有意義的,所以BOM對UTF-8同樣沒有意義。但Unicode標准卻BOM在UTF-8編碼格式中存在。其存在位置在文件開 頭,以三個字節0xEF, 0xBB, 0xBF表示。
UTF-8編碼不推薦使用無意義的BOM,但許多Windows程序卻在保存UTF-8編碼的文件時將其存為帶BOM的格式(即在文件開頭加上0xEFBBBF三個字節),這么干的就包括Windows記事本。
因此,在編輯UTF-8的文件時,建議不要使用記事本等進行編輯,雖然保存后的文件仍然是UTF-8,但卻已經不再是保存前的UTF-8了,這在使用這些文件的時候可能就會因為編碼而出現問題,就像我文章開頭所描述的那樣。
去掉UTF-8編碼文件BOM的方法:用Notepad++的Encoding菜單中的Encoding in UTF-8 without BOM即可。或者用任何16進制編輯器將文件前三個字節去掉。再或者更簡單的:用VIM設置UTF-8編碼的BOM標記。
文章參考: https://blog.csdn.net/zhuihunke_2008/article/details/53422450