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 相关文章推荐
js+css实现上下翻页相册代码分享
Aug 18 Javascript
基于jQuery实现点击最后一行实现行自增效果的表格
Jan 12 Javascript
prototype.js常用函数详解
Jun 18 Javascript
Bootstrap BootstrapDialog使用详解
Feb 17 Javascript
JS实现向iframe中表单传值的方法
Mar 24 Javascript
基于JS脚本语言的基础语法详解
Jul 22 Javascript
微信小程序基于本地缓存实现点赞功能的方法
Dec 18 Javascript
Vue header组件开发详解
Jan 26 Javascript
微信小程序云开发修改云数据库中的数据方法
May 18 Javascript
轻松学习JavaScript函数中的 Rest 参数
May 30 Javascript
JS中的算法与数据结构之常见排序(Sort)算法详解
Aug 16 Javascript
JS如何实现封装列表右滑动删除收藏按钮
Jul 23 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正则过滤html标签、空格、换行符的代码(附说明)
2010/10/25 PHP
php学习笔记(三)操作符与控制结构
2011/08/06 PHP
php 获取页面中指定内容的实现类
2014/01/23 PHP
php使用cookie显示用户上次访问网站日期的方法
2015/01/26 PHP
YII框架批量插入数据的方法
2017/03/18 PHP
laravel实现分页样式替换示例代码(增加首、尾页)
2017/09/22 PHP
PHP 加密 Password Hashing API基础知识点
2020/03/02 PHP
仿迅雷焦点广告效果(JQuery版)
2008/11/19 Javascript
javascript 自定义事件初探
2009/08/21 Javascript
jquery制作select列表双向选择示例代码
2014/09/02 Javascript
javascript实现可全选、反选及删除表格的方法
2015/05/15 Javascript
Jquery实现遮罩层的方法
2015/06/08 Javascript
javascript+HTML5的canvas实现七夕情人节3D玫瑰花效果代码
2015/08/04 Javascript
探索angularjs+requirejs全面实现按需加载的套路
2016/02/26 Javascript
JS HTML图片显示Canvas 压缩功能
2017/07/21 Javascript
JS异步函数队列功能实例分析
2017/11/28 Javascript
form表单数据封装成json格式并提交给服务器的实现方法
2017/12/14 Javascript
Vue CLI3.0中使用jQuery和Bootstrap的方法
2019/02/28 jQuery
VUE脚手架的下载和配置步骤详解
2019/04/01 Javascript
用node.js写一个jenkins发版脚本
2019/05/21 Javascript
Vue.js 实现地址管理页面思路详解(地址添加、编辑、删除和设置默认地址)
2019/12/11 Javascript
Electron 打包问题:electron-builder 下载各种依赖出错(推荐)
2020/07/09 Javascript
Openlayers学习之地图比例尺控件
2020/09/28 Javascript
nuxt 页面路由配置,主页轮播组件开发操作
2020/11/05 Javascript
使用 Python 玩转 GitHub 的贡献板(推荐)
2019/04/04 Python
Python将二维列表list的数据输出(TXT,Excel)
2020/04/23 Python
python实现xml转json文件的示例代码
2020/12/30 Python
matplotlib阶梯图的实现(step())
2021/03/02 Python
美国开幕式潮店:Opening Ceremony
2018/02/10 全球购物
最新党员的自我评价分享
2013/11/04 职场文书
治安消防安全责任书
2014/07/23 职场文书
2014年财务工作自我评价
2014/09/23 职场文书
幼儿园园长安全责任书
2015/05/08 职场文书
教师聘用意向书
2015/05/11 职场文书
生产设备维护保养制度
2015/08/06 职场文书
小学信息技术教学反思
2016/02/16 职场文书