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 相关文章推荐
给网站上的广告“加速”显示的方法
Apr 08 Javascript
jquery获取被勾选的checked(选中)的那一行的3列和4列的值
Jul 04 Javascript
两种方法基于jQuery实现IE浏览器兼容placeholder效果
Oct 14 Javascript
JS实现可自定义大小,可双击关闭的弹出层效果
Oct 16 Javascript
Bootstrap零基础入门教程(三)
Jul 18 Javascript
使用JavaScript判断用户输入的是否为正整数(两种方法)
Feb 05 Javascript
jQuery选择器特殊字符与属性空格问题
Aug 14 jQuery
Angular2 组件间通过@Input @Output通讯示例
Aug 24 Javascript
Vue开发实现吸顶效果的示例代码
Aug 21 Javascript
vue实现简单的星级评分组件源码
Nov 16 Javascript
JavaScript鼠标拖拽事件详解
Apr 03 Javascript
vue 表单输入框不支持focus及blur事件的解决方案
Nov 17 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+jquery编码方面的一些心得(utf-8 gb2312)
2010/10/12 PHP
Thinkphp批量更新数据的方法汇总
2016/06/29 PHP
才发现的超链接js导致网页中GIF动画停止的解决方法
2007/11/02 Javascript
解决jquery的datepicker的本地化以及Today问题
2012/05/23 Javascript
在windows上用nodejs搭建静态文件服务器的简单方法
2016/08/11 NodeJs
vue.js入门教程之绑定class和style样式
2016/09/02 Javascript
微信小程序中post方法与get方法的封装
2017/09/26 Javascript
微信小程序用户自定义模版用法实例分析
2017/11/28 Javascript
JS实现的哈夫曼编码示例【原始版与修改版】
2018/04/22 Javascript
纯JS实现的读取excel文件内容功能示例【支持所有浏览器】
2018/06/23 Javascript
微信小程序chooseImage的用法(从本地相册选择图片或使用相机拍照)
2018/08/22 Javascript
react native基于FlatList下拉刷新上拉加载实现代码示例
2018/09/30 Javascript
微信小程序开发摇一摇功能
2019/11/22 Javascript
[02:39]DOTA2国际邀请赛助威团西雅图第一天
2013/08/08 DOTA
学习python之编写简单简单连接数据库并执行查询操作
2016/02/27 Python
PyCharm使用教程之搭建Python开发环境
2016/06/07 Python
Python从单元素字典中获取key和value的实例
2018/12/31 Python
Python函数和模块的使用总结
2019/05/20 Python
Python中字符串String的基本内置函数与过滤字符模块函数的基本用法
2019/05/27 Python
numpy下的flatten()函数用法详解
2019/05/27 Python
解决Pyinstaller 打包exe文件 取消dos窗口(黑框框)的问题
2019/06/21 Python
Python实现LR1文法的完整实例代码
2020/10/25 Python
细说CSS3中box属性中的overflow-x属性和overflow-y属性值的效果
2014/07/21 HTML / CSS
html5设计原理(推荐收藏)
2014/05/17 HTML / CSS
浅谈HTML5 服务器推送事件(Server-sent Events)
2017/08/01 HTML / CSS
Html5饼图绘制实现统计图的方法
2020/08/05 HTML / CSS
大学三年的自我评价
2013/12/25 职场文书
爱护草坪标语
2014/06/24 职场文书
金融专业求职信
2014/08/05 职场文书
校园新闻广播稿5篇
2014/10/10 职场文书
2014年测量员工作总结
2014/12/12 职场文书
鲁迅故居导游词
2015/02/05 职场文书
社区元宵节活动总结
2015/02/06 职场文书
政府会议通知范文
2015/04/15 职场文书
检讨书格式范文
2015/05/07 职场文书
教师节领导致辞
2015/07/29 职场文书