Node.js实现批量去除BOM文件头


Posted in Javascript onDecember 20, 2014

之前的同事写了一个工具,但有bug,就是在替换文件后原文件的格式变成utf8 BOM了,这种带BOM的XML在Mac下可能读取不出来,所以就需要写个工具处理一下。

其实思路比较简单,首先遍历目录,然后读取目录,将文件头三个字节去除掉,然后保存为utf-8格式的文件即可,直接上代码吧 :)

var fs = require('fs');

var path = "目标路径..";


function readDirectory(dirPath) {

    if (fs.existsSync(dirPath)) {

        var files = fs.readdirSync(dirPath);

        

        files.forEach(function(file) {

            var filePath = dirPath + "/" + file;

            var stats = fs.statSync(filePath);
            if (stats.isDirectory()) {

                console.log('\n读取目录:\n', filePath, "\n");

                readDirectory(filePath);

            } else if (stats.isFile()) {

                var buff = fs.readFileSync(filePath);

                if (buff[0].toString(16).toLowerCase() == "ef" && buff[1].toString(16).toLowerCase() == "bb" && buff[2].toString(16).toLowerCase() == "bf") {

                    //EF BB BF 239 187 191

                    console.log('\发现BOM文件:', filePath, "\n");
                    buff = buff.slice(3);

                    fs.writeFile(filePath, buff.toString(), "utf8");

                }

            }

        });       
    } else {

        console.log('Not Found Path : ', dirPath);

    }

}
readDirectory(path);
Javascript 相关文章推荐
JavaScript中this关键字使用方法详解
Mar 08 Javascript
探索Emberjs制作一个简单的Todo应用
Nov 07 Javascript
jquery性能优化高级技巧
Aug 24 Javascript
原生js实现autocomplete插件
Apr 14 Javascript
jQuery实现表格行和列的动态添加与删除方法【测试可用】
Aug 01 Javascript
js 函数式编程学习笔记
Mar 25 Javascript
微信小程序 action-sheet 反馈上拉菜单简单实例
May 11 Javascript
Javascript中的作用域及块级作用域
Dec 08 Javascript
Angular2之二级路由详解
Aug 31 Javascript
解决vue单页路由跳转后scrollTop的问题
Sep 03 Javascript
vue2.0 实现富文本编辑器功能
May 26 Javascript
JS实现网页烟花动画效果
Mar 10 Javascript
javascript删除一个html元素节点的方法
Dec 20 #Javascript
Node.js中调用mysql存储过程示例
Dec 20 #Javascript
零基础搭建Node.js、Express、Ejs、Mongodb服务器及应用开发入门
Dec 20 #Javascript
jQuery多媒体插件jQuery Media Plugin使用详解
Dec 19 #Javascript
jquery图片播放浏览插件prettyPhoto使用详解
Dec 19 #Javascript
js中匿名函数的创建与调用方法分析
Dec 19 #Javascript
浅谈Javascript中匀速运动的停止条件
Dec 19 #Javascript
You might like
十天学会php之第九天
2006/10/09 PHP
在PHP中使用Sockets 从Usenet中获取文件
2008/01/10 PHP
php建立Ftp连接的方法
2015/03/07 PHP
php根据日期显示所在星座的方法
2015/07/13 PHP
PHP5.0 TIDY_PARSE_FILE缓冲区溢出漏洞的解决方案
2018/10/14 PHP
extjs3 combobox取value和text案例详解
2013/02/06 Javascript
jquery 无限级联菜单案例分享
2013/03/26 Javascript
如何实现textarea里的不同文本显示不同颜色
2014/01/20 Javascript
Jquery EasyUI中弹出确认对话框以及加载效果示例代码
2014/02/13 Javascript
node.js中的console.dir方法使用说明
2014/12/10 Javascript
jquery UI Datepicker时间控件的使用方法(终结版)
2015/11/07 Javascript
JavaScript 模块的循环加载实现方法
2015/12/13 Javascript
浅谈Javascript中的12种DOM节点类型
2016/08/19 Javascript
浅析Javascript ES6新增值比较函数Object.is
2016/08/24 Javascript
AngularJS自定义指令之复制指令实现方法
2017/05/18 Javascript
基于JavaScript实现飘落星星特效
2017/08/10 Javascript
对Vue- 动态元素属性及v-bind和v-model的区别详解
2018/08/27 Javascript
vue ssr 实现方式(学习笔记)
2019/01/18 Javascript
浅谈Vuex注入Vue生命周期的过程
2019/05/20 Javascript
SublimeText 2编译python出错的解决方法(The system cannot find the file specified)
2013/11/27 Python
python使用os模块的os.walk遍历文件夹示例
2014/01/27 Python
Python实例分享:快速查找出被挂马的文件
2014/06/08 Python
Django objects.all()、objects.get()与objects.filter()之间的区别介绍
2017/06/12 Python
Python3 处理JSON的实例详解
2017/10/29 Python
Python多层装饰器用法实例分析
2018/02/09 Python
pycharm访问mysql数据库的方法步骤
2019/06/18 Python
pygame实现打字游戏
2021/02/19 Python
python切割图片的示例
2020/11/12 Python
Python Selenium破解滑块验证码最新版(GEETEST95%以上通过率)
2021/01/29 Python
html5使用window.postMessage进行跨域实现数据交互的一次实战
2021/02/24 HTML / CSS
印度网上药店:1mg
2017/10/13 全球购物
期末总结的个人自我评价
2013/11/02 职场文书
岗位说明书怎么写
2014/07/30 职场文书
普宁寺导游词
2015/02/04 职场文书
幼儿教师小班个人总结
2015/02/05 职场文书
国庆节慰问信
2015/02/15 职场文书