node读取文本文件时,去掉BOM

Posted Rhett_Web

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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‘);
}

 

以上是关于node读取文本文件时,去掉BOM的主要内容,如果未能解决你的问题,请参考以下文章

XmlException: Text node canot appear in this state

php去掉文件UTF-8的BOM头

使用 BOM 读取 UTF-8 文本文件

怎么辨别文本文档的编码?

python带bom的utf-8-sig如何去掉bom

XmlException: Text node cannot appear in this state. Line 1, position 1(Unity读取xml报错,BOM头问题)