Node.js文本文件BOM頭的去除方法
BOM
字節(jié)順序標記(byte order mark),是位于碼點U+FEFF的統(tǒng)一碼字符的名稱。當以UTF-16或UTF-32來將UCS/統(tǒng)一碼字符所組成的字符串編碼時,這個字符被用來標示其字節(jié)序。它常被用來當做標示文件是以UTF-8、UTF-16或UTF-32編碼的標記。
不同編碼的字節(jié)順序標記的表示:
| 編碼 | 表示(十六進制) | 表示(十進制) |
| UTF8 | EF BB BF | 239 187 191 |
| UTF-16(大端序) | FE FF | 254 255 |
| UTF-16(小端序) | FF FE | 255 254 |
| UTF-32(大端序) | 00 00 FE FF | 0 0 254 255 |
| UTF-32(小端序) | FF FE 00 00 | 255 254 0 0 |
BOM添加
UTF8編碼不需要BOM, 但是我們可以手動給UTF8編碼文件添加一個BOM頭
const fs = require('fs');
fs.writeFile('./bom.js', '\ufeffThis is an example with accents : é è à ', 'utf8', function (err) {})
BOM移除
對于UTF8來說,BOM的有無并不是必須的,因為UTF8字節(jié)沒有順序,不需要標記,也就是說一個UTF8文件可能有BOM,也可能沒有BOM。
根據(jù)不同編碼的BOM不同,我們可以根據(jù)文件頭幾個字節(jié)來判斷文件是否包含BOM,以及使用的那種Unicode編碼。
BOM字符雖然起到了標記文件編碼的作用,其本身卻不屬于文件內(nèi)容的一部分,如果讀取文本文件時不去掉BOM,在某些使用場景下就會有問題。例如我們把幾個JS文件合并成一個文件后,如果文件中間含有BOM字符,就會導(dǎo)致瀏覽器JS語法錯誤。因此,使用Node.js讀取文本文件時,一般需要去掉BOM。
// 對于字符串內(nèi)容
function stripBOM(content) {
// 檢測第一個字符是否為BOM
if (content.charCodeAt(0) === 0xFEFF) {
content = content.slice(1);
}
return content;
}
// 對于Buffer
function stripBOMBuffer(buf) {
if (buf[0] === 0xEF && buf[1] === 0xBB && buf[2] === 0xBF) {
buf = buf.slice(3);
}
return buf;
}
參考
總結(jié)
到此這篇關(guān)于Node.js文本文件BOM頭去除的文章就介紹到這了,更多相關(guān)Node.js文本文件BOM頭去除內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解基于node.js的腳手架工具開發(fā)經(jīng)歷
這篇文章主要介紹了詳解基于node.js的腳手架工具開發(fā)經(jīng)歷,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-01-01
詳解Node.js中exports和module.exports的區(qū)別
這篇文章主要介紹了詳解Node.js中exports和module.exports的區(qū)別,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-04-04
開發(fā)Node CLI構(gòu)建微信小程序腳手架的示例
這篇文章主要介紹了開發(fā)Node CLI構(gòu)建微信小程序腳手架,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-03-03
Nodejs+Socket.io實現(xiàn)通訊實例代碼
本篇文章主要介紹了Nodejs+Socket.io實現(xiàn)通訊實例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-02-02

