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

BOM: Byte Order MarkUTF-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‘);
}

 

时间: 2024-12-27 23:26:36

node读取文本文件时,去掉BOM的相关文章

python读取文本文件数据

本文要点刚要: (一)读文本文件格式的数据函数:read_csv,read_table 1.读不同分隔符的文本文件,用参数sep 2.读无字段名(表头)的文本文件 ,用参数names 3.为文本文件制定索引,用index_col 4.跳行读取文本文件,用skiprows 5.数据太大时需要逐块读取文本数据用chunksize进行分块. (二)将数据写成文本文件格式函数:to_csv 范例如下: (一)读取文本文件格式的数据集 1.read_csv和read_table的区别:  #read_cs

使用editplus等编程工具时UTF-8编码去掉BOM头方法(转载备查)

Unicode规范中有一个BOM的概念.BOM--Byte Order Mark,就是字节序标记.在这里找到一段关于BOM的说明: 在UCS 编码中有一个叫做"ZERO WIDTH NO-BREAK SPACE"的字符,它的编码是FEFF.而FFFE在UCS中是不存在的字符,所以不应该出现在实际传输中.UCS规范建议我们在传输字节流前,先传输 字符"ZERO WIDTH NO-BREAK SPACE".这样如果接收者收到FEFF,就表明这个字节流是Big-Endia

c++读取文本文件

#include<iostream> #include<fstream> using namespace std; int main() { int a,b=-100000,c; cin>>c; int i; ifstream infile("f1.dat",ios::in); for(i=0;i<c;i++) { infile>>a; if(a>b) b=a; } cout<<"max number:

StreamReader 读取文本文件乱码问题

解决读取文本文件乱码问题.我采取的是读取前先判断文本文件格式. StreamReader sr = new StreamReader(fullfileName, GetFileEncodeType(fullfileName)) public System.Text.Encoding GetFileEncodeType(string filename) { System.IO.FileStream fs = new System.IO.FileStream(filename, System.IO.

解决Python读取文件时出现UnicodeDecodeError: &#39;gbk&#39; codec can&#39;t decode byte...

用Python在读取某个html文件时会遇到下面问题: 出问题的代码: 1 if __name__ == '__main__': 2 fileHandler = open('../report.html', mode='r') 3 4 report_lines = fileHandler.readlines() 5 for line in report_lines: 6 print(line.rstrip()) 修改方式是在open方法指定参数encoding='UTF-8': if __nam

iOS 创建静态库文件时去掉其中的Symbols

在工程中创建静态库文件时,默认会将一些Symbols加到静态库文件中,这样做有两个缺点: 1.如果引用静态库文件的工程中发生了bug,就会直接跳转到静态库的源码. 2.静态库文件的大小会因此翻几番.本人最近做的这个静态库文件中,去掉symbols前大小为7.8MB左右,去掉以后大小为2.8MB. 要去掉Symbols,首先打开Build Settings并选中静态库的Target,然后设置下列选项: 如果有错误或遗漏,欢迎批评指正. iOS 创建静态库文件时去掉其中的Symbols,布布扣,bu

Matlab在读取图像时怎么实现手动选择图像

平时看的一些关于图像处理的文献通常要在matlab里面写一下,以便加深对这个算法的理解,当然写好以后需要图像来测试,以前我常常在 path='图像所在的路径'; img=imread(path+图像的名字); 在imread函数中进行不断修改图像的名字,以便测试不同的图像对于该算法的效果如何. 想必大家也是常常这样做实验吧,今天突然想,这样一直改名字多麻烦多浪费时间,我觉得像Matlab这么强大的软件肯定提供这样的函数给用户,因为每个软件都要考虑用户体验的哈! 在网上搜了很久没找到非常好的答案,

使用字符流读取文本文件

1.字符输入流Reader类 Reader类是读取字符流的抽象类,它提供了常用的方法. Reader rd= new FileReader("Test/xy.txt");// int b=rd.read(); //从输入流中读取单个字符// System.out.println((char)b); char[] chars = new char[10]; //从输入流中读取chars.length长度的字符 int length = rd.read(chars);   System.o

读取文本文件中指定的几列

今天在论坛上看到一个问题,这个问题大概是这样的,读取文本文件中指定的几列,并存储入数据库中. Insus.NET花上些少时间,实现读取文本的功能部分.创建一个文本文件,文本添加好几行.每一行有好几列,列与列之间使用逗号分隔. adf,adfadf,adsfgads,qwer,wrt,wrey,asdfs,qwer,tryerqert6uy7,468u4,578,qewrqew,qwertwet,67u46,45676,45qer87,47857,et356y,etyedgh adsadf,adf