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


Posted in Javascript onNovember 22, 2020

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;
}

参考

  • 字符编码笔记:ASCII,Unicode 和 UTF-8
  • 字节顺序标记

总结

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

Javascript 相关文章推荐
告诉大家什么是JSON
Jun 10 Javascript
用jQuery扩展自写的 UI导航
Jan 13 Javascript
新老版本juqery获取radio对象的方法
Mar 01 Javascript
js控制的回到页面顶端goTop的代码实现
Mar 20 Javascript
jquery和javascript的区别(常用方法比较)
Jul 04 Javascript
JavaScript如何从listbox里同时删除多个项目
Oct 12 Javascript
IE中图片的onload事件无效问题和解决方法
Jun 06 Javascript
JavaScript的内存释放问题详解
Jan 21 Javascript
使用CSS+JavaScript或纯js实现半透明遮罩效果的实例分享
May 09 Javascript
Angular ng-class详解及实例代码
Sep 19 Javascript
echart简介_动力节点Java学院整理
Aug 11 Javascript
一次微信小程序内地图的使用实战记录
Sep 09 Javascript
JavaScript手写数组的常用函数总结
Nov 22 #Javascript
JavaScript实现点击图片换背景
Nov 20 #Javascript
JavaScript实现鼠标经过表格某行时此行变色
Nov 20 #Javascript
JavaScript实现复选框全选和取消全选
Nov 20 #Javascript
JavaScript实现网页下拉菜单效果
Nov 20 #Javascript
JavaScript实现网页tab栏效果制作
Nov 20 #Javascript
原生js实现弹窗消息动画
Nov 20 #Javascript
You might like
php 404错误页面实现代码
2009/06/22 PHP
php printf输出格式使用说明
2010/12/05 PHP
抓取并下载CSS中所有图片文件的php代码
2011/09/26 PHP
php中用date函数获取当前时间有误的解决办法
2013/08/02 PHP
php分页代码学习示例分享
2014/02/20 PHP
php获取服务器端mac和客户端mac的地址支持WIN/LINUX
2014/05/15 PHP
php验证码的制作思路和实现方法
2015/11/12 PHP
Laravel实现自定义错误输出内容的方法
2016/10/10 PHP
jquery 操作单选框,复选框,下拉列表实现代码
2009/10/27 Javascript
淘宝搜索框效果实现分析
2011/03/05 Javascript
JS 两日期相减,获得天数的小例子(兼容IE,FF)
2013/07/01 Javascript
鼠标滑在标题上显示图片的JS代码
2013/11/19 Javascript
javascript表格的渲染组件
2015/07/03 Javascript
javascript中offset、client、scroll的属性总结
2015/08/13 Javascript
jQuery UI制作选项卡(tabs)
2016/12/13 Javascript
vue路由跳转时判断用户是否登录功能的实现
2017/10/26 Javascript
详解JavaScript基础知识(JSON、Function对象、原型、引用类型)
2018/01/16 Javascript
VUE+Element UI实现简单的表格行内编辑效果的示例的代码
2018/10/31 Javascript
Vue-CLI项目中路由传参的方式详解
2019/09/01 Javascript
[02:16]卖萌的僵尸 DOTA2神话信使飞僵小宝来袭
2014/03/24 DOTA
Python实现将DOC文档转换为PDF的方法
2015/07/25 Python
Python中在for循环中嵌套使用if和else语句的技巧
2016/06/20 Python
对python的文件内注释 help注释方法
2018/05/23 Python
Python基础学习之函数方法实例详解
2019/06/18 Python
在Python中合并字典模块ChainMap的隐藏坑【推荐】
2019/06/27 Python
pandas中ix的使用详细讲解
2020/03/09 Python
使用jupyter notebook直接打开.md格式的文件
2020/04/10 Python
CSS3新增布局之: flex详解
2020/06/18 HTML / CSS
Html5剪切板功能的实现代码
2018/06/29 HTML / CSS
违反工作纪律检讨书
2014/02/15 职场文书
Redis如何一键部署脚本
2021/04/12 Redis
matplotlib之pyplot模块实现添加子图subplot的使用
2021/04/25 Python
为什么node.js不适合大型项目
2021/04/28 Javascript
解决Goland 同一个package中函数互相调用的问题
2021/05/06 Golang
Python数据分析入门之数据读取与存储
2021/05/13 Python
如何用vue实现网页截图你知道吗
2021/11/17 Vue.js