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 自动填写表单的实现方法
Apr 09 Javascript
node.js中的url.parse方法使用说明
Dec 10 Javascript
JavaScript仿静态分页实现方法
Aug 04 Javascript
JavaScript子窗口调用父窗口变量和函数的方法
Oct 09 Javascript
javascript实现密码验证
Nov 10 Javascript
纯JS代码实现气泡效果
May 04 Javascript
BootStrap中Table分页插件使用详解
Oct 09 Javascript
移动端触屏幻灯片图片切换插件idangerous swiper.js
Apr 10 Javascript
Bootstrap 表单验证formValidation 实现表单动态验证功能
May 17 Javascript
Node.js实现注册邮箱激活功能的方法示例
Mar 23 Javascript
vue2.0实现音乐/视频播放进度条组件
Jun 06 Javascript
vue组件开发props验证的实现
Feb 12 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
PHP5.2下preg_replace函数的问题
2015/05/08 PHP
TP3.2.3框架文件上传操作实例详解
2020/01/23 PHP
javascript之函数直接量(function(){})()
2007/06/29 Javascript
js下利用控制器载入对应脚本
2010/07/17 Javascript
超酷的网页音乐播放器DewPlayer使用方法
2010/12/18 Javascript
js控制淡入淡出示例代码
2013/11/12 Javascript
JS中使用FormData上传文件、图片的方法
2016/08/07 Javascript
为Jquery EasyUI 组件加上清除功能的方法(详解)
2017/04/13 jQuery
微信小程序--组件(swiper)详细介绍
2017/06/13 Javascript
基于vue-cli vue-router搭建底部导航栏移动前端项目
2018/02/28 Javascript
vue导出html、word和pdf的实现代码
2018/07/31 Javascript
vue2.0 实现富文本编辑器功能
2019/05/26 Javascript
vue3.0中使用postcss-pxtorem的具体方法
2019/11/20 Javascript
js原生map实现的方法总结
2020/01/19 Javascript
python进阶教程之函数对象(函数也是对象)
2014/08/30 Python
Python中的默认参数详解
2015/06/24 Python
python正则表达式re之compile函数解析
2017/10/25 Python
python自动12306抢票软件实现代码
2018/02/24 Python
python多线程之事件Event的使用详解
2018/04/27 Python
python代码 输入数字使其反向输出的方法
2018/12/22 Python
下载官网python并安装的步骤详解
2019/10/12 Python
Python Mock模块原理及使用方法详解
2020/07/07 Python
Python读取多列数据以及用matplotlib制作图表方法实例
2020/09/23 Python
Pycharm添加虚拟解释器报错问题解决方案
2020/10/13 Python
英国二手iPhone、音乐、电影和游戏商店:musicMagpie
2018/10/26 全球购物
什么是聚集索引和非聚集索引
2012/01/17 面试题
上海中网科技笔试题
2012/02/19 面试题
RIP版本1跟版本2的区别
2013/12/30 面试题
技术总监的工作职责
2013/11/13 职场文书
2014大学生全国两会学习心得体会
2014/03/13 职场文书
竞聘上岗演讲稿
2014/05/16 职场文书
医院深入开展党的群众路线教育实践活动实施方案
2014/08/27 职场文书
公证书格式
2015/01/23 职场文书
2015年学校安全工作总结
2015/04/22 职场文书
承诺书怎么写 ?
2019/04/16 职场文书
MySQL数据库事务的四大特性
2022/04/20 MySQL