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 相关文章推荐
javascript 流畅动画实现原理
Sep 08 Javascript
php上传图片并给图片打上透明水印的代码
Jun 07 Javascript
jquery简单图片切换显示效果实现方法
Jan 14 Javascript
js动态添加的DIV中的onclick事件简单实例
Jul 25 Javascript
jQuery checkbox选中问题之prop与attr注意点分析
Nov 15 Javascript
微信小程序开发之相册选择和拍照详解及实例代码
Feb 22 Javascript
JS ES6多行字符串与连接字符串的表示方法
Apr 26 Javascript
vue v-on监听事件详解
May 17 Javascript
JavaScript实现图片切换效果
Aug 12 Javascript
Vue实现购物车场景下的应用
Nov 27 Javascript
vue+echarts实现动态折线图的方法与注意
Sep 01 Javascript
vant时间控件使用方法详解
Dec 24 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新手NOTICE错误常见解决方法
2011/12/07 PHP
深入PHP中的HashTable结构详解
2013/06/13 PHP
深入file_get_contents与curl函数的详解
2013/06/25 PHP
详解PHP序列化反序列化的方法
2015/10/27 PHP
PHP实现原生态图片上传封装类方法
2016/11/08 PHP
详谈php ip2long 出现负数的原因及解决方法
2017/04/05 PHP
PHP保存Base64图片base64_decode的问题整理
2019/11/04 PHP
PHP中通过getopt解析GNU C风格命令行选项
2019/11/18 PHP
通过JS获取用户本地图片路径并显示的代码
2012/02/16 Javascript
解析javascript系统错误:-1072896658的解决办法
2013/07/08 Javascript
jquery实现div拖拽宽度示例代码
2013/07/31 Javascript
javascript实现表格增删改操作实例详解
2015/05/15 Javascript
JS面向对象编程详解
2016/03/06 Javascript
JavaScript利用HTML DOM进行文档操作的方法
2016/03/28 Javascript
JS中如何实现复选框全选功能
2016/12/19 Javascript
利用Vue v-model实现一个自定义的表单组件
2017/04/27 Javascript
微信小程序自定义toast组件的方法详解【含动画】
2019/05/11 Javascript
在Layui 的表格模板中,实现layer父页面和子页面传值交互的方法
2019/09/10 Javascript
Vue获取页面元素的相对位置的方法示例
2020/02/05 Javascript
Node.js API详解之 readline模块用法详解
2020/05/22 Javascript
Vue props中Object和Array设置默认值操作
2020/07/30 Javascript
[01:32]DOTA2 2015国际邀请赛中国区预选赛第四日战报
2015/05/29 DOTA
Python 编码处理-str与Unicode的区别
2016/09/06 Python
python 处理telnet返回的More,以及get想要的那个参数方法
2019/02/14 Python
python爬虫租房信息在地图上显示的方法
2019/05/13 Python
Flask框架路由和视图用法实例分析
2019/11/07 Python
基于Python+QT的gui程序开发实现
2020/07/03 Python
使用Python绘制台风轨迹图的示例代码
2020/09/21 Python
python Gabor滤波器讲解
2020/10/26 Python
优秀研究生自我鉴定
2013/12/04 职场文书
优秀通讯员事迹材料
2014/01/28 职场文书
安全宣传标语
2014/06/10 职场文书
2014年民主评议党员个人总结
2014/09/24 职场文书
学校领导四风问题整改措施思想汇报
2014/10/09 职场文书
2015年支教教师工作总结
2015/07/22 职场文书
Golang 并发编程 SingleFlight模式
2022/04/26 Golang