nodejs批量修改文件编码格式


Posted in NodeJs onJanuary 22, 2015

摘要:

最近在制作手册的时候遇到了一个问题'文档乱码',查看文件之后发现文件编码不对,总共100多个文件,如果用编辑器另存为utf8,那就悲催了。所以自己就写了个程序,批量修改文件编码格式。

代码:

/**

 * 修改文件编码格式,例如:GBK转UTF8

 * 支持多级目录

 * @param {String} [root_path] [需要进行转码的文件路径]

 * @param {Array}  [file_type] [需要进行转码的文件格式,比如html文件]

 * @param {String} [from_code] [文件的编码]

 * @param {String} [to_code]   [文件的目标编码]

 */

// 引入包

var fs = require('fs'),

  iconv = require('iconv-lite');

// 全局变量

var root_path = './html',

    file_type = ['html', 'htm'],

    from_code = 'GBK',

    to_code   = 'UTF8';

/**

 * 判断元素是否在数组内

 * @date   2015-01-13

 * @param  {[String]}   elem [被查找的元素]

 * @return {[bool]}        [description]

 */

Array.prototype.inarray = function(elem) {

  "use strict";

  var l = this.length;

  while (l--) {

    if (this[l] === elem) {

      return true;

    }

  }

  return false;

};

/**

 * 转码函数

 * @date   2015-01-13

 * @param  {[String]}   root [编码文件目录]

 * @return {[type]}        [description]

 */

function encodeFiles(root) {

  "use strict";

  var files = fs.readdirSync(root);

  files.forEach(function(file) {

    var pathname = root + '/' + file,

      stat = fs.lstatSync(pathname);

    if (!stat.isDirectory()) {

      var name = file.toString();

      if (!file_type.inarray(name.substring(name.lastIndexOf('.') + 1))) {

        return;

      }

      fs.writeFile(pathname, iconv.decode(fs.readFileSync(pathname), from_code), {

        encoding: to_code

      }, function(err) {

        if (err) {

          throw err;

        }

      });

    } else {

      encodeFiles(pathname);

    }

  });

}

encodeFiles(root_path);

 

小结:

上面的程序支持多级目录,同一个文件不能进行多次操作,否则又会出现乱码。

完整代码:https://github.com/baixuexiyang/coding,你可以fork到自己的账号下,如果有bug请在issue上提。

是不是非常不错呢,希望大家能够喜欢,有疑问就留言吧。

NodeJs 相关文章推荐
初探nodeJS
Jan 24 NodeJs
Nodejs多站点切换Htpps协议详解及简单实例
Feb 23 NodeJs
使用nodejs爬取前程无忧前端技能排行
May 06 NodeJs
ajax +NodeJS 实现图片上传实例
Jun 06 NodeJs
NodeJS收发GET和POST请求的示例代码
Aug 25 NodeJs
webstorm中配置nodejs环境及npm的实例
May 15 NodeJs
nodejs之koa2请求示例(GET,POST)
Aug 07 NodeJs
nodejs图片处理工具gm用法小结
Dec 12 NodeJs
nodejs对项目下所有空文件夹创建gitkeep的方法
Aug 02 NodeJs
详解利用nodejs对本地json文件进行增删改查
Sep 20 NodeJs
nodejs对mongodb数据库的增加修删该查实例代码
Jan 05 NodeJs
分享五个Node.js开发的优秀实践 
Apr 07 NodeJs
NodeJS学习笔记之MongoDB模块
Jan 13 #NodeJs
NodeJS学习笔记之(Url,QueryString,Path)模块
Jan 13 #NodeJs
NodeJS学习笔记之FS文件模块
Jan 13 #NodeJs
NodeJS学习笔记之Http模块
Jan 13 #NodeJs
Nodejs学习笔记之Stream模块
Jan 13 #NodeJs
Nodejs学习笔记之NET模块
Jan 13 #NodeJs
Nodejs学习笔记之Global Objects全局对象
Jan 13 #NodeJs
You might like
PHP编程网上资源导航
2006/10/09 PHP
Fedora下安装php Redis扩展笔记
2014/09/03 PHP
thinkphp模板输出技巧汇总
2014/11/24 PHP
smarty高级特性之对象的使用方法
2015/12/25 PHP
纯JAVASCRIPT图表动画插件Highcharts Examples
2011/04/16 Javascript
深入理解JavaScript系列(7) S.O.L.I.D五大原则之开闭原则OCP
2012/01/15 Javascript
Extjs Label的 fieldLabel和html属性值对齐的方法
2014/06/15 Javascript
JavaScript基础函数整理汇总
2015/01/30 Javascript
javascript转换日期字符串为Date日期对象的方法
2015/02/13 Javascript
jQuery焦点控制图层展示延迟隐藏的方法
2015/03/09 Javascript
JavaScript中的setMilliseconds()方法使用详解
2015/06/11 Javascript
聊一聊JS中this的指向问题
2016/06/17 Javascript
详解react如何在组件中获取路由参数
2017/06/15 Javascript
js实现鼠标跟随运动效果
2020/08/02 Javascript
vue-cli 组件的导入与使用教程详解
2018/04/11 Javascript
jQuery实现简易QQ聊天框
2020/02/10 jQuery
python实现问号表达式(?)的方法
2013/11/27 Python
pycharm 将python文件打包为exe格式的方法
2019/01/16 Python
python操作kafka实践的示例代码
2019/06/19 Python
Python 数据可视化pyecharts的使用详解
2019/06/26 Python
如何安装并在pycharm使用selenium的方法
2020/04/30 Python
python实现Oracle查询分组的方法示例
2020/04/30 Python
python IP地址转整数
2020/11/20 Python
世界闻名的衬衫制造商:Savile Row Company
2018/07/30 全球购物
Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
2015/01/27 面试题
医药专业应届毕业生求职信范文
2014/01/01 职场文书
物业管理毕业生的自我评价
2014/02/17 职场文书
小学生学习感言
2014/03/10 职场文书
向领导表决心的话
2014/03/11 职场文书
初三新学期计划书
2014/05/03 职场文书
2014党员干部四风问题对照检查材料思想汇报
2014/09/24 职场文书
村党的群众路线教育实践活动工作总结
2014/10/25 职场文书
2015年招聘工作总结
2014/12/12 职场文书
2015年优质护理服务工作总结
2015/04/08 职场文书
python实现三阶魔方还原的示例代码
2021/04/28 Python
解决MySQL添加新用户-ERROR 1045 (28000)的问题
2022/03/03 MySQL