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实现动态增加文件域表单
Feb 12 Javascript
js实现兼容IE和FF的上下层的移动
May 04 Javascript
JS验证 只能输入小数点,数字,负数的实现方法
Oct 07 Javascript
基于Marquee.js插件实现的跑马灯效果示例
Jan 25 Javascript
ES6新特性之变量和字符串用法示例
Apr 01 Javascript
Vue响应式原理详解
Apr 18 Javascript
React Native使用百度Echarts显示图表的示例代码
Nov 07 Javascript
Vue工程模板文件 webpack打包配置方法
Dec 26 Javascript
jquery判断滚动条距离顶部的距离方法
Sep 05 jQuery
vue+element-ui实现表格编辑的三种实现方式
Oct 31 Javascript
JavaScript 双向链表操作实例分析【创建、增加、查找、删除等】
Apr 28 Javascript
vue和H5 draggable实现拖拽并替换效果
Jul 29 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多进程并发编程防止出现僵尸进程的方法分析
2020/02/28 PHP
JavaScript入门教程(9) Document文档对象
2009/01/31 Javascript
JavaScript asp.net 获取当前超链接中的文本
2009/04/14 Javascript
JQuery中使用on方法绑定hover事件实例
2014/12/09 Javascript
浅析javascript 定时器
2014/12/23 Javascript
jquery实现从数组移除指定的值
2015/06/24 Javascript
关于javascript原型的修改与重写(覆盖)差别详解
2016/08/31 Javascript
深入理解requestAnimationFrame的动画循环
2016/09/20 Javascript
基于javascript实现的购物商城商品倒计时实例
2016/12/11 Javascript
SpringMVC简单整合Angular2的示例
2017/07/31 Javascript
Vue中使用clipboard实现复制功能
2018/09/05 Javascript
js屏蔽退格键(backspace或者叫后退键与F5)
2019/02/10 Javascript
通过js随机函数Math.random实现乱序
2020/05/19 Javascript
vue 获取url参数、get参数返回数组的操作
2020/11/12 Javascript
JavaScript中的几种继承方法示例
2020/12/06 Javascript
浅谈python中scipy.misc.logsumexp函数的运用场景
2016/06/23 Python
Python学习pygal绘制线图代码分享
2017/12/09 Python
Python数据结构与算法之二叉树结构定义与遍历方法详解
2017/12/12 Python
Python中的函数作用域
2018/05/07 Python
浅谈Pycharm调用同级目录下的py脚本bug
2018/12/03 Python
python实现PID算法及测试的例子
2019/08/08 Python
python中with语句结合上下文管理器操作详解
2019/12/19 Python
Python 项目转化为so文件实例
2019/12/23 Python
python加密解密库cryptography使用openSSL生成的密匙加密解密
2020/02/11 Python
Python类和实例的属性机制原理详解
2020/03/21 Python
python3用PyPDF2解析pdf文件,用正则匹配数据方式
2020/05/12 Python
canvas因为图片资源不在同一域名下而导致的跨域污染画布的解决办法
2019/01/18 HTML / CSS
韩国流行时尚女装网站:Dintchina(中文)
2018/07/19 全球购物
一套比较完整的软件测试人员面试题
2012/05/13 面试题
电子商务个人职业生涯规划范文
2014/02/12 职场文书
内蒙古鄂尔多斯市市长寄语
2014/04/10 职场文书
六一儿童节演讲稿
2014/05/23 职场文书
民主评议党员自我评议范文2014
2014/09/26 职场文书
导游词之唐山景点
2019/12/18 职场文书
教你使用TensorFlow2识别验证码
2021/06/11 Python
Java中的Kafka为什么性能这么快及4大核心详析
2022/09/23 Java/Android