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远程代码执行
Aug 28 NodeJs
nodejs基础应用
Feb 03 NodeJs
Nodejs 发送Post请求功能(发短信验证码例子)
Feb 09 NodeJs
详解nodeJS中读写文件方法的区别
Mar 06 NodeJs
NodeJS实现微信公众号关注后自动回复功能
May 31 NodeJs
浅谈nodejs中的类定义和继承的套路
Jul 26 NodeJs
Nodejs 复制文件/文件夹的方法
Aug 24 NodeJs
NodeJs form-data格式传输文件的方法
Dec 13 NodeJs
Linux Centos7.2下安装nodejs&npm配置全局路径的教程
May 15 NodeJs
详解NodeJs开发微信公众号
May 25 NodeJs
NodeJS 将文件夹按照存放路径变成一个对应的JSON的方法
Oct 17 NodeJs
Nodejs实现的操作MongoDB数据库功能完整示例
Feb 02 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 whois查询API制作方法
2011/06/23 PHP
php制作中间带自己定义图片二维码的方法
2014/01/27 PHP
php实现的微信红包算法分析(非官方)
2015/09/25 PHP
php $_SESSION会员登录实例分享
2021/01/19 PHP
用javascript实现分割提取页面所需内容
2007/05/09 Javascript
jQuery ajax在GBK编码下表单提交终极解决方案(非二次编码方法)
2010/10/20 Javascript
Javascript基础知识(三)BOM,DOM总结
2014/09/29 Javascript
怎么通过onclick事件获取js函数返回值(代码少)
2015/07/28 Javascript
jquery在ie7下选择器的问题导致append失效的解决方法
2016/01/10 Javascript
基于MVC5和Bootstrap的jQuery TreeView树形控件(二)之数据支持json字符串、list集合
2016/08/11 Javascript
html5 canvas 详细使用教程
2017/01/20 Javascript
在vue项目中,使用axios跨域处理
2018/03/07 Javascript
Electron 调用命令行(cmd)
2019/09/23 Javascript
Vue数字输入框组件的使用方法
2019/10/19 Javascript
javascript实现视频弹幕效果(两个版本)
2019/11/28 Javascript
python scipy卷积运算的实现方法
2019/09/16 Python
Python 将json序列化后的字符串转换成字典(推荐)
2020/01/06 Python
Pycharm 安装 idea VIM插件的图文教程详解
2020/02/21 Python
python爬虫开发之Beautiful Soup模块从安装到详细使用方法与实例
2020/03/09 Python
Python基于smtplib模块发送邮件代码实例
2020/05/29 Python
Python创建临时文件和文件夹
2020/08/05 Python
美国生日蛋糕店:Bake Me A Wish!
2017/02/08 全球购物
香港最新科技与优质家居产品购物网站:J SELECT
2018/08/21 全球购物
优质美利奴羊毛袜,不只是徒步旅行:Darn Tough Vermont
2018/11/05 全球购物
爱尔兰最大的体育零售商:Life Style Sports
2019/06/12 全球购物
声明struct x1 { . . . }; 和typedef struct { . . . }x2;有什么不同
2012/06/02 面试题
幼儿园优秀教师事迹
2014/02/13 职场文书
《长江之歌》教学反思
2014/04/17 职场文书
推荐信格式要求
2014/05/09 职场文书
班主任工作经验交流材料
2014/05/13 职场文书
小学优秀学生评语
2014/12/29 职场文书
护士自荐信范文
2015/03/25 职场文书
停水通知
2015/04/16 职场文书
cf战队宣传语
2015/07/13 职场文书
2016思想纪律作风整顿心得体会
2016/01/23 职场文书
idea下配置tomcat避坑详解
2022/04/12 Servers