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开发技术大全 第4章 直接量与字符集
Jul 03 Javascript
JS和JQUERY获取页面大小,滚动条位置,元素位置(示例代码)
Dec 14 Javascript
jquery根据锚点offset值实现动画切换
Sep 11 Javascript
js实现浏览本地文件并显示扩展名的方法
Aug 17 Javascript
理解JS事件循环
Jan 07 Javascript
bootstrap table复杂操作代码
Nov 01 Javascript
详解js运算符单竖杠“|”与“||”的用法和作用介绍
Nov 04 Javascript
jquery submit()不能提交表单的解决方法
Apr 24 jQuery
bootstrap fileinput组件整合Springmvc上传图片到本地磁盘
May 11 Javascript
详细分析jsonp的原理和实现方式
Nov 20 Javascript
Vue中computed与methods的区别详解
Mar 24 Javascript
vue-quill-editor 自定义工具栏和自定义图片上传路径操作
Aug 03 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
生成缩略图
2006/10/09 PHP
ThinkPHP3.2.2的插件控制器功能
2015/03/05 PHP
分享ThinkPHP3.2中关联查询解决思路
2015/09/20 PHP
创建无限极分类树型结构的简单方法
2017/06/20 PHP
JavaScript中“+=”的应用
2007/02/02 Javascript
20个非常棒的Jquery实用工具 国外文章
2010/01/01 Javascript
基于jquery的超简单上下翻
2010/04/20 Javascript
分页栏的web标准实现
2011/11/01 Javascript
Jquery 改变radio/checkbox选中状态,获取选中的值(示例代码)
2013/12/12 Javascript
jQuery实现不断闪烁文字的方法
2015/05/15 Javascript
JavaScript取得键盘按下方向键是哪个的方法
2015/08/04 Javascript
jQuery mobile 移动web(6)
2015/12/20 Javascript
原生js实现放大镜效果
2017/01/11 Javascript
详解webpack解惑:require的五种用法
2017/06/09 Javascript
在Vue项目中使用d3.js的实例代码
2018/05/01 Javascript
node.js中TCP Socket多进程间的消息推送示例详解
2018/07/10 Javascript
webpack4+Vue搭建自己的Vue-cli项目过程分享
2018/08/29 Javascript
VuePress 静态网站生成方法步骤
2019/02/14 Javascript
三剑客:offset、client和scroll还傻傻分不清?
2020/12/04 Javascript
jQuery是用来干什么的 jquery其实就是一个js框架
2021/02/04 jQuery
python用ConfigObj读写配置文件的实现代码
2013/03/04 Python
Python实现发送email的几种常用方法
2014/08/18 Python
Python中endswith()函数的基本使用
2015/04/07 Python
用Python编写简单的微博爬虫
2016/03/04 Python
Python中查看文件名和文件路径
2017/03/31 Python
python绘制简单折线图代码示例
2017/12/19 Python
用Python调用win命令行提高工作效率的实例
2019/08/14 Python
详解Pycharm出现out of memory的终极解决方法
2020/03/03 Python
css3 transform导致子元素固定定位变成绝对定位的方法
2020/03/06 HTML / CSS
CSS3属性 line-clamp控制文本行数的使用
2020/03/19 HTML / CSS
美国最大和最受信任的二手轮胎商店:Bestusedtires.com
2020/06/02 全球购物
秘书岗位职责
2013/11/18 职场文书
詹天佑教学反思
2014/04/30 职场文书
创业女性典型材料
2014/05/02 职场文书
2015年工商所工作总结
2015/05/21 职场文书
浅谈由position属性引申的css进阶讨论
2021/05/25 HTML / CSS