Node.js去除文字檔案BOM頭
文章推薦指數: 80 %
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構建微服務
延伸文章資訊
- 1remove utf-8 bom with javascript - gists · GitHub
remove utf-8 BOM from ressource "res". // res.charCodeAt(0) === 0xFEFF | res.charCodeAt(0) === 65...
- 2strip-bom - npm
Strip UTF-8 byte order mark (BOM) from a string. Latest version: 5.0.0, ... Start using strip-bom...
- 3How to properly handle UTF-8 BOM files in Nodejs?
Tagged with node, nodejstip, javascript. ... This happens because 𝗡𝗼𝗱𝗲𝗷𝘀 does not strip 𝗕𝗢𝗠 when ...
- 4Removing BOM characters from AJAX-posted string
The characters are in the middle of strings I want to simply remove them all. The data comes from...
- 5doesn't remove unicode BOM from empty file - Lightrun
Prettier 1.18.2 No playground. For example using CLI : prettier --write test.js. Input: Empty fil...