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 select选中的一个小问题
Oct 11 Javascript
半角全角相互转换的js函数
Oct 16 Javascript
JQuery each()嵌套使用小结
Apr 18 Javascript
利用jQuery和CSS将背景图片拉伸
Oct 16 Javascript
MVC Ajax Helper或Jquery异步加载部分视图
Nov 29 Javascript
Javascript技术难点之apply,call与this之间的衔接
Dec 04 Javascript
javascript实现抽奖程序的简单实例
Jun 07 Javascript
vue-cli中的webpack配置详解
Sep 25 Javascript
vue.js-div滚动条隐藏但有滚动效果的实现方法
Mar 03 Javascript
vue keep-alive 动态删除组件缓存的例子
Nov 04 Javascript
微信小程序点击保存图片到本机功能
Dec 13 Javascript
vue调用微信JSDK 扫一扫,相册等需要注意的事项
Jan 03 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_MySQL教程-第一天
2007/03/18 PHP
PHP+shell实现多线程的方法
2015/07/01 PHP
magento后台无法登录解决办法的两种方法
2016/12/09 PHP
js拦截alert对话框另类应用
2013/01/16 Javascript
使用javascript实现ListBox左右全选,单选,多选,全请
2013/11/07 Javascript
JS使用replace()方法和正则表达式进行字符串的搜索与替换实例
2014/04/10 Javascript
AngularJS语法详解(续)
2015/01/23 Javascript
JS去除iframe滚动条的方法
2015/04/01 Javascript
JS随机洗牌算法之数组随机排序
2016/03/23 Javascript
使用vue.js开发时一些注意事项
2016/04/27 Javascript
利用JQuery阻止事件冒泡
2016/12/01 Javascript
Vue 通过自定义指令回顾v-内置指令(小结)
2018/09/03 Javascript
js实现弹出框的拖拽效果实例代码详解
2019/04/16 Javascript
vue+elementUI 复杂表单的验证、数据提交方案问题
2019/06/24 Javascript
Python中Collection的使用小技巧
2014/08/18 Python
基于python中的TCP及UDP(详解)
2017/11/06 Python
使用 Python 处理 JSON 格式的数据
2019/07/22 Python
python滑块验证码的破解实现
2019/11/10 Python
Python 元组拆包示例(Tuple Unpacking)
2019/12/24 Python
pytorch之ImageFolder使用详解
2020/01/06 Python
python能在浏览器能运行吗
2020/06/17 Python
Python运算符+与+=的方法实例
2021/02/18 Python
用CSS3绘制三角形的简单方法
2015/07/17 HTML / CSS
丝芙兰巴西官方商城:SEPHORA巴西
2016/10/31 全球购物
加拿大最大的相机店:Henry’s
2017/05/17 全球购物
如何在.net Winform里面显示PDF文档
2012/09/11 面试题
公务员职务工作的自我评价
2013/11/01 职场文书
销售总监工作职责
2013/11/21 职场文书
语文教育专业应届生求职信
2013/11/23 职场文书
兼职学生的自我评价
2013/11/24 职场文书
《祁黄羊》教学反思
2014/04/22 职场文书
诚实守信道德模范事迹材料
2014/08/15 职场文书
运动会广播稿200字(10篇)
2014/10/12 职场文书
2014年设备管理工作总结
2014/11/26 职场文书
2015上半年个人工作总结
2015/07/27 职场文书
保险公司岗前培训工作总结
2015/10/24 职场文书