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 11 Javascript
一个很有趣3D球状标签云兼容IE8
Aug 22 Javascript
javascript解析json实例详解
Nov 05 Javascript
自己动手手写jQuery插件总结
Jan 20 Javascript
理解javascript封装
Feb 23 Javascript
走进AngularJs之过滤器(filter)详解
Feb 17 Javascript
详解用vue.js和laravel实现微信支付
Jun 23 Javascript
JavaScript原生实现观察者模式的示例
Dec 15 Javascript
React 路由懒加载的几种实现方案
Oct 23 Javascript
js删除对象/数组中null、undefined、空对象及空数组方法示例
Nov 14 Javascript
Element-UI中Upload上传文件前端缓存处理示例
Feb 21 Javascript
layer设置maxWidth及maxHeight解决方案
Jul 26 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的大小写敏感问题整理
2011/12/29 PHP
作为PHP程序员应该了解MongoDB的五件事
2013/06/03 PHP
PHP命名空间(namespace)的使用基础及示例
2014/08/18 PHP
PHP实现视频文件上传完整实例
2014/08/28 PHP
CentOS下PHP安装Oracle扩展
2015/02/15 PHP
php异常处理方法实例汇总
2015/06/24 PHP
PHP操作Redis数据库常用方法示例
2018/08/25 PHP
基于jquery的内容循环滚动小模块(仿新浪微博未登录首页滚动微博显示)
2011/03/28 Javascript
深入理解JavaScript系列(15) 函数(Functions)
2012/04/12 Javascript
Jquery 自定义动画概述及示例
2013/03/29 Javascript
input禁止键盘及中文输入,但可以点击
2014/02/13 Javascript
判断iframe里的页面是否加载完成
2014/06/06 Javascript
javascript实现行拖动的方法
2015/05/27 Javascript
iscroll.js的上拉下拉刷新时无法回弹的解决方法
2016/02/18 Javascript
AngularJS中的过滤器filter用法完全解析
2016/04/22 Javascript
jQuery实现获取元素索引值index的方法
2016/09/18 Javascript
js中的eval()函数把含有转义字符的字符串转换成Object对象的方法
2016/12/02 Javascript
浅谈Node.js:理解stream
2016/12/08 Javascript
使用Require.js封装原生js轮播图的实现代码
2017/06/15 Javascript
vue自定义指令directive实例详解
2018/01/17 Javascript
jQuery表单校验插件validator使用方法详解
2020/02/18 jQuery
python使用super()出现错误解决办法
2017/08/14 Python
使用Py2Exe for Python3创建自己的exe程序示例
2018/10/31 Python
python pygame实现五子棋小游戏
2020/10/26 Python
详解Python 4.0 预计推出的新功能
2019/07/26 Python
Python3 shutil(高级文件操作模块)实例用法总结
2020/02/19 Python
python如何代码集体右移
2020/07/20 Python
css3使用animation属性实现炫酷效果(推荐)
2020/02/04 HTML / CSS
纯CSS3实现运行时钟的示例代码
2021/01/25 HTML / CSS
印尼值得信赖的在线交易网站:Bukalapak
2019/03/11 全球购物
Belstaff英国官方在线商店:Belstaff.co.uk
2021/02/09 全球购物
生产副总岗位职责
2013/11/28 职场文书
学雷锋先进个人事迹
2014/05/26 职场文书
殡葬服务心得体会
2014/09/11 职场文书
文艺有韵味的诗句(生命类、亲情类...)
2019/07/11 职场文书
关于pytest结合csv模块实现csv格式的数据驱动问题
2022/05/30 Python