node讀取文本文件時,去掉BOM

BOM: Byte Order Mark
UTF-8 BOM又叫UTF-8 簽名,其實UTF-8 的BOM對UFT-8沒有做用,
是爲了支援UTF-16,UTF-32才加上的BOM,BOM簽名的意思就是告訴編輯器當前文件採用何種編碼,
方便編輯器識別,可是BOM雖然在編輯器中不顯示,可是會產生輸出,就像多了一個空行,


BOM的移除

BOM用於標記一個文本文件使用Unicode編碼,其自己是一個Unicode字符("\uFEFF"),位於文本文件頭部。在不一樣的Unicode編碼下,BOM字符對應的二進制字節以下:瀏覽器

Bytes      Encoding
----------------------------
    FE FF       UTF16BE
    FF FE       UTF16LE
    EF BB BF    UTF8

所以,咱們能夠根據文本文件頭幾個字節等於啥來判斷文件是否包含BOM,以及使用哪一種Unicode編碼。可是,BOM字符雖然起到了標記文件編碼的做用,其自己卻不屬於文件內容的一部分,若是讀取文本文件時不去掉BOM,在某些使用場景下就會有問題。例如咱們把幾個JS文件合併成一個文件後,若是文件中間含有BOM字符,就會致使瀏覽器JS語法錯誤。所以,使用NodeJS讀取文本文件時,通常須要去掉BOM。例如,如下代碼實現了識別和去除UTF8 BOM的功能。編輯器

function readText(pathname) {
    var bin = fs.readFileSync(pathname);

    if (bin[0] === 0xEF && bin[1] === 0xBB && bin[2] === 0xBF) {
        bin = bin.slice(3);
    }

    return bin.toString('utf-8');
}
相關文章
相關標籤/搜索