Node.js文本文件BOM头的去除方法

 更新时间:2020年11月22日 10:35:06   作者:Sobird  
这篇文章主要给大家介绍了关于Node.js文本文件BOM头的去除方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

BOM

字节顺序标记(byte order mark),是位于码点U+FEFF的统一码字符的名称。当以UTF-16或UTF-32来将UCS/统一码字符所组成的字符串编码时,这个字符被用来标示其字节序。它常被用来当做标示文件是以UTF-8、UTF-16或UTF-32编码的标记。

不同编码的字节顺序标记的表示:

编码 表示(十六进制) 表示(十进制)
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字节没有顺序,不需要标记,也就是说一个UTF8文件可能有BOM,也可能没有BOM。

根据不同编码的BOM不同,我们可以根据文件头几个字节来判断文件是否包含BOM,以及使用的那种Unicode编码。

BOM字符虽然起到了标记文件编码的作用,其本身却不属于文件内容的一部分,如果读取文本文件时不去掉BOM,在某些使用场景下就会有问题。例如我们把几个JS文件合并成一个文件后,如果文件中间含有BOM字符,就会导致浏览器JS语法错误。因此,使用Node.js读取文本文件时,一般需要去掉BOM。

// 对于字符串内容
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;
}

参考

总结

到此这篇关于Node.js文本文件BOM头去除的文章就介绍到这了,更多相关Node.js文本文件BOM头去除内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • npm配置国内镜像资源+淘宝镜像的方法

    npm配置国内镜像资源+淘宝镜像的方法

    这篇文章主要介绍了npm配置国内镜像资源+淘宝镜像的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-09-09
  • Node.JS文件系统解析实例详解

    Node.JS文件系统解析实例详解

    这篇文章主要介绍了Node.JS文件系统解析实例详解的相关资料,需要的朋友可以参考下
    2017-05-05
  • 详解基于node.js的脚手架工具开发经历

    详解基于node.js的脚手架工具开发经历

    这篇文章主要介绍了详解基于node.js的脚手架工具开发经历,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-01-01
  • node.js中的fs.lchownSync方法使用说明

    node.js中的fs.lchownSync方法使用说明

    这篇文章主要介绍了node.js中的fs.lchownSync方法使用说明,本文介绍了fs.lchownSync的方法说明、语法、接收参数、使用实例和实现源码,需要的朋友可以参考下
    2014-12-12
  • Node批量爬取头条视频并保存方法

    Node批量爬取头条视频并保存方法

    在本篇文章中我们给大家介绍了node爬取头条里面的视频,并进行批量保存的方法,有需要的朋友可以测试以下。
    2018-09-09
  • node爬取新型冠状病毒的疫情实时动态

    node爬取新型冠状病毒的疫情实时动态

    这篇文章主要介绍了node爬取新型冠状病毒的疫情实时动态,非常不错,本文通过实例代码给大家讲解的非常详细,需要的朋友可以参考下
    2020-02-02
  • 详解使用抽象语法树AST实现一个AOP切面逻辑

    详解使用抽象语法树AST实现一个AOP切面逻辑

    这篇文章主要为大家介绍了使用抽象语法树AST实现一个AOP切面逻辑的简单方法,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04
  • 详解Node.js中exports和module.exports的区别

    详解Node.js中exports和module.exports的区别

    这篇文章主要介绍了详解Node.js中exports和module.exports的区别,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-04-04
  • 开发Node CLI构建微信小程序脚手架的示例

    开发Node CLI构建微信小程序脚手架的示例

    这篇文章主要介绍了开发Node CLI构建微信小程序脚手架,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • Nodejs+Socket.io实现通讯实例代码

    Nodejs+Socket.io实现通讯实例代码

    本篇文章主要介绍了Nodejs+Socket.io实现通讯实例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02

最新评论