被微軟的UTF 8 BOM編碼坑了

2021-08-17 18:19:59 字數 411 閱讀 7084

今天用git拉去**時發現有的檔案會出現亂碼,但同事拉取下來卻沒有出現問題。

在這件事上,我和同事的唯一區別就是所用的作業系統不同,我用的是mac,他用的是window。同乙個檔案在不同作業系統的表現不同,很有可能是採用了window支援但mac不支援的編碼格式。

緊接著,我檢視了出問題的檔案的編碼格式,果不其然,它並不是我們平常使用的utf-8,而是utf-8 bom編碼。

bom(byte order mark)是為 utf-16 和 utf-32 準備的,用於標記位元組序(byte order)。utf-8不推薦使用無意義的bom,但許多windows程式卻在儲存utf-8編碼的檔案時將其存為帶bom的格式(即在檔案開頭加上0xefbbbf三個位元組),這麼幹的就包括windows記事本,這種編碼格式的檔案在 windows 之外的作業系統裡會出現問題。

UTF8 bom問題的研究

當儲存文字檔案為utf 8 bom時,在內容的開頭會多出3個位元組 ef bb bf 它是用來標示這個文件就是utf 8編碼的文件,可以防止文字編輯器編碼解發布錯。但是多出來的3個位元組也會惹些麻煩。例如 session start 在session cookie使用前,不能有任何輸出,空行空格都不...

utf 8與utf 8 bom的區別

在utf 8編碼檔案中bom在檔案頭部,占用三個位元組,用來標識該檔案屬於utf 8編碼,現在已經有很多軟體識別bom頭,但還是有些不能識別bom頭,比如php就不能識別bom頭,這也就是用記事本編輯utf 8編碼的php檔案後,就會報錯的原因。在windows環境下,用記事本開啟任何乙個文字檔案,...

utf8與utf8 bom的區別

utf8與utf8 bom的區別 首先建立檔案1.txt,2.txt,其次利用vim修改2.txt的編碼格式為utf8 bom 去掉utf 8 bom set nobomb 保留utf 8 bom set bomb 最後利用vim xxd顯示文字的十六進製制表示 在vim的命令狀態下,xxd 將當前...