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实现遍历文件夹并统计文件大小
May 28 NodeJs
使用Angular和Nodejs、socket.io搭建聊天室及多人聊天室
Aug 21 NodeJs
Nodejs实战心得之eventproxy模块控制并发
Oct 27 NodeJs
Nodejs中的this详解
Mar 26 NodeJs
用NodeJS实现批量查询地理位置的经纬度接口
Aug 16 NodeJs
nodejs密码加密中生成随机数的实例代码
Jul 17 NodeJs
nodejs项目windows下开机自启动的方法
Nov 22 NodeJs
基于nodejs的雪碧图制作工具的示例代码
Nov 05 NodeJs
nodejs 使用http进行post或get请求的实例(携带cookie)
Jan 03 NodeJs
nodejs中各种加密算法的实现详解
Jul 11 NodeJs
nodejs环境使用Typeorm连接查询Oracle数据
Dec 05 NodeJs
浅谈JS和Nodejs中的事件驱动
May 05 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注释实例技巧
2008/10/03 PHP
PHP语言中global和$GLOBALS[]的分析 之二
2012/02/02 PHP
详解PHP匿名函数与注意事项
2016/03/29 PHP
PHP对象、模式与实践之高级特性分析
2016/12/08 PHP
PHP基于phpqrcode类生成二维码的方法详解
2018/03/14 PHP
多个iframe自动调整大小的问题
2006/09/18 Javascript
jquery 插件 任意位置浮动固定层
2008/12/25 Javascript
鼠标滚轮控制网页横向移动实现思路
2013/03/22 Javascript
jquery实现table鼠标经过变色代码
2013/09/25 Javascript
实现checkbox全选、反选、取消JavaScript小脚本异常
2014/04/10 Javascript
JS实现单行文字不间断向上滚动的方法
2015/01/29 Javascript
js实现九宫格布局效果
2020/05/28 Javascript
JavaScript实现简单验证码
2020/08/24 Javascript
绘制微信小程序验证码功能的实例代码
2021/01/05 Javascript
手动实现vue2.0的双向数据绑定原理详解
2021/02/06 Vue.js
[43:57]Liquid vs Mineski 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/19 DOTA
Python批量修改文件后缀的方法
2014/01/26 Python
用Python编写一个每天都在系统下新建一个文件夹的脚本
2015/05/04 Python
深入解析Python中的descriptor描述器的作用及用法
2016/06/27 Python
Python面向对象类继承和组合实例分析
2018/05/28 Python
使用Python-OpenCV向图片添加噪声的实现(高斯噪声、椒盐噪声)
2019/05/28 Python
pyinstaller打包多个py文件和去除cmd黑框的方法
2019/06/21 Python
基于python模拟bfs和dfs代码实例
2020/11/19 Python
IdealFit官方网站:女性蛋白质、补充剂和运动服装
2019/03/24 全球购物
德国W家官网,可直邮中国的母婴商城:Windeln.de
2021/03/03 全球购物
万户网络JAVA程序员岗位招聘笔试试卷
2013/01/08 面试题
外贸销售员求职的自我评价
2013/11/23 职场文书
商场主管竞聘书
2014/03/31 职场文书
离婚协议书怎样才有法律效力
2014/10/10 职场文书
计划生育工作总结2015
2015/04/03 职场文书
2015社区精神文明建设工作总结
2015/04/21 职场文书
看上去很美观后感
2015/06/10 职场文书
成事在人观后感
2015/06/16 职场文书
环保主题班会教案
2015/08/13 职场文书
2016年法制宣传月活动总结
2016/04/01 职场文书
Python如何用re模块实现简易tokenizer
2022/05/02 Python