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 相关文章推荐
jQuery阻止冒泡和HTML默认操作
Nov 17 Javascript
Js 弹出框口并返回值的两种常用方法
Dec 30 Javascript
js 弹出框只弹一次(二次修改之后的)
Nov 26 Javascript
JS根据变量保存方法名并执行方法示例
Apr 04 Javascript
javascript中sort() 方法使用详解
Aug 30 Javascript
js实现文字闪烁特效的方法
Dec 17 Javascript
WebGL利用FBO完成立方体贴图效果完整实例(附demo源码下载)
Jan 26 Javascript
关于angular js_$watch监控属性和对象详解
Apr 24 Javascript
基于node下的http小爬虫的示例代码
Jan 11 Javascript
用node-webkit把web应用打包成桌面应用(windows环境)
Feb 01 Javascript
JS实现鼠标拖拽盒子移动及右键点击盒子消失效果示例
Jan 29 Javascript
vue实现水波涟漪效果的点击反馈指令
May 31 Vue.js
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中多进程编程的相关函数的使用
2015/08/18 PHP
利用laravel+ajax实现文件上传功能方法示例
2017/08/13 PHP
PHP切割汉字的常用方法实例总结
2019/04/27 PHP
动态加载外部javascript文件的函数代码分享
2011/07/28 Javascript
javascript自适应宽度的瀑布流实现思路
2013/02/20 Javascript
关于IE中getElementsByClassName不能用的问题解决方法
2013/08/26 Javascript
js禁止回车提交表单的示例代码
2013/12/23 Javascript
javascript中interval与setTimeOut的区别示例介绍
2014/03/14 Javascript
js在数组中删除重复的元素自保留一个(两种实现思路)
2014/08/22 Javascript
jQuery/CSS3图片特效插件整理推荐
2014/12/07 Javascript
轻松创建nodejs服务器(10):处理上传图片
2014/12/18 NodeJs
jQuery回调函数的定义及用法实例
2014/12/23 Javascript
Node.js事件驱动
2015/06/18 Javascript
jQuery Dialog 取消右上角删除按钮事件
2016/09/07 Javascript
Bootstrap作品展示站点实战项目2
2016/10/14 Javascript
浅谈AngularJS中ng-class的使用方法
2016/11/11 Javascript
jQuery实现隔行变色的方法分析(对比原生JS)
2016/11/18 Javascript
JS前向后瞻正则表达式定义与用法示例
2016/12/27 Javascript
AngularJS中控制器函数的定义与使用方法示例
2017/10/10 Javascript
vue实现导航栏效果(选中状态刷新不消失)
2017/12/13 Javascript
详解JS取出两个数组中的不同或相同元素
2019/03/20 Javascript
vue中多路由表头吸顶实现的几种布局方式
2019/04/12 Javascript
vue中的 $slot 获取插槽的节点实例
2019/11/12 Javascript
Layui实现主窗口和Iframe层参数传递
2019/11/14 Javascript
Vue如何实现变量表达式选择器
2021/02/18 Vue.js
python中使用pyhook实现键盘监控的例子
2014/07/18 Python
python 提取key 为中文的json 串方法
2018/12/31 Python
Python操作SQLite数据库过程解析
2019/09/02 Python
Python 实现try重新执行
2019/12/21 Python
简单了解Python变量作用域正确使用方法
2020/06/12 Python
Python3+PyCharm+Django+Django REST framework配置与简单开发教程
2021/02/16 Python
Ticketmaster德国票务网站:购买音乐会和体育等门票
2016/11/14 全球购物
中学门卫岗位职责
2013/12/26 职场文书
2014年党员自我评议总结
2014/09/23 职场文书
迎客户欢迎词三篇
2019/09/27 职场文书
详解Flask开发技巧之异常处理
2021/06/15 Python