BOM: Byte Order Mark
UTF-8 BOM又叫UTF-8 签名,其实UTF-8 的BOM对UFT-8没有做用,
是为了支援UTF-16,UTF-32才加上的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'); }