Node.js去除文字檔案BOM頭

文章推薦指數: 80 %
投票人數:10人

Node.js去除文字檔案BOM頭 · BOM · BOM新增 · BOM移除 · 參考. MdEditor Node.js去除文字檔案BOM頭 語言:CN/TW/HK 時間 2020-11-2016:11:20 Sobird 主題: Node.js BOM 位元組順序標記(byteordermark),是位於碼點U+FEFF的統一碼字元的名稱。

當以UTF-16或UTF-32來將UCS/統一碼字元所組成的字串編碼時,這個字元被用來標示其位元組序。

它常被用來當做標示檔案是以UTF-8、UTF-16或UTF-32編碼的標記。

不同編碼的位元組順序標記的表示: 編碼 表示(十六進位制) 表示(十進位制) UTF8 EFBBBF 239187191 UTF-16(大端序) FEFF 254255 UTF-16(小端序) FFFE 255254 UTF-32(大端序) 0000FEFF 00254255 UTF-32(小端序) FFFE0000 25525400 BOM新增 UTF8編碼不需要BOM,但是我們可以手動給UTF8編碼檔案新增一個BOM頭 constfs=require('fs'); fs.writeFile('./bom.js','\ufeffThisisanexamplewithaccents:éèà','utf8',function(err){}) BOM移除 對於UTF8來說,BOM的有無並不是必須的,因為UTF8位元組沒有順序,不需要標記,也就是說一個UTF8檔案可能有BOM,也可能沒有BOM。

根據不同編碼的BOM不同,我們可以根據檔案頭幾個位元組來判斷檔案是否包含BOM,以及使用的那種Unicode編碼。

BOM字元雖然起到了標記檔案編碼的作用,其本身卻不屬於檔案內容的一部分,如果讀取文字檔案時不去掉BOM,在某些使用場景下就會有問題。

例如我們把幾個JS檔案合併成一個檔案後,如果檔案中間含有BOM字元,就會導致瀏覽器JS語法錯誤。

因此,使用Node.js讀取文字檔案時,一般需要去掉BOM。

//對於字串內容 functionstripBOM(content){ //檢測第一個字元是否為BOM if(content.charCodeAt(0)===0xFEFF){ content=content.slice(1); } returncontent; } //對於Buffer functionstripBOMBuffer(buf){ if(buf[0]===0xEF&&buf[1]===0xBB&&buf[2]===0xBF){ buf=buf.slice(3); } returnbuf; } 參考 字元編碼筆記:ASCII,Unicode和UTF-8 位元組順序標記 「其他文章」 跟我一起寫Makefile Node.js去除文字檔案BOM頭 BPMN-JS中的依賴注入設計 bpmn-js全解析 Express模板引擎 「Node.js」 Node.js實現輕量化程序池和執行緒池 如何從零開始建設一個網站「VueNode.js開發實戰」 Node.js基礎與環境搭建「VueNode.js開發實戰」 Node.js中的module.exports與exports Node.js可以用來做什麼事? 聊聊字串轉樹結構 emlab,一款分析JavaScript堆並查詢瀏覽器和Node.js中記憶體洩漏的開源框架原創為少黑客下午茶 前端腳手架開發入門 最全面的Node.js資源彙總推薦 瞭解如何使用Node.js構建微服務



請為這篇文章評分?