什麼是檔案的BOM頭

2022-06-08 13:09:11 字數 1289 閱讀 4213

bom是用來判斷文字檔案是哪一種unicode編碼的標記,其本身是乙個unicode字元("\ufeff"),位於文字檔案頭部。

在不同的unicode編碼中,對應的bom的二進位制位元組如下:

fe ff utf16be

ff fe utf16le

ef bb bf utf8

所以我們可以根據檔案頭部的幾個位元組和上面的**對應來判斷該檔案是哪種編碼形式。

bom頭在記事本中是看不到的

以utf8為例,新建乙個1.txt檔案,然後開啟檔案 輸入 hello world 然後另存為 此時更改檔案的編碼格式 由預設的ansi 即gb2312(國標2312)編碼改成utf8

然後通過下面的node**,來列印該文字檔案的buffer 就可以看到我們所說的bom頭字元

let fs = require('fs');

fs.readfile('./1.txt',function

(err,data))

////

前三個位元組就是對應的我們utf8編碼的文字的bom頭字元

雖然bom字元起到了標記檔案編碼的作用但是他並不屬於檔案的內容部分,所以會產生一些問題:

1.在某些使用場景下就會有問題。例如我們把幾個js檔案合併成乙個檔案後,如果檔案中間含有bom字元,就會導致瀏覽器js語法錯誤。

2.php就不能識別bom頭,php並不會忽略bom,所以在讀取、包含或者引用這些檔案時,會把bom作為該檔案開頭正文的一部分。根據嵌入式語言的特點,這串字元將被直接執行(顯示)出來。由此造成即使頁面的 top padding 設定為0,也無法讓整個網頁緊貼瀏覽器頂部,因為在html一開頭有這3個字元呢!

方法一:在檔案另存為的時候選擇無bom頭的utf8編碼

方法二:使用node中的檔案模組獲取檔案的buffer資料並去掉前三個位元組,**如下:

function

deleteutf8bomhead(path)

return

buf}

console.log(deleteutf8bomhead('./1.txt'));//

//將gbk編碼的buffer轉化成utf8的字串

//在這裡我們要引入乙個庫 iconv-lite

到底什麼是UTF 8 BOM頭

bom是什麼 unicode的學名是 universal multiple octet coded character set 簡稱為ucs。ucs可以看作是 unicode character set 的縮寫。在ucs 編碼中有乙個叫做 zero width no break space 中文譯名...

php程式去除檔案 bom頭

header content type text html charset utf 8 if isset get dir else auto 1 設定為1標示檢測bom並去除,設定為0標示只進行bom檢測,不去除 echo 當前查詢的目錄為 basedir.當前的設定是 echo auto?檢測檔案...

php 頭bom 關於php中bom頭的簡介

關於php中bom頭的簡介 閱讀 99 這篇文章主要介紹關於php中bom頭的簡介,文中示例 介紹的非常詳細,具有一定的參考價值,感興趣的小夥伴們一定要看完!bom頭是一串隱藏的字元,用於讓記事本等編輯器識別這個檔案是否以utf 8編碼。php不會忽略bom,所以在讀取 包含或者引用這些檔案時,會把...