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的前后端分离的思考与实践(四)安全问题解决方案
Sep 26 NodeJs
详谈nodejs异步编程
Dec 04 NodeJs
NodeJS Web应用监听sock文件实例
Feb 18 NodeJs
nodejs简单实现中英文翻译
May 04 NodeJs
windows下安装nodejs及框架express
Aug 07 NodeJs
NodeJS实现客户端js加密
Jan 09 NodeJs
nodejs socket实现的服务端和客户端功能示例
Jun 02 NodeJs
详解nodejs异步I/O和事件循环
Jun 07 NodeJs
NodeJs通过async/await处理异步的方法
Oct 09 NodeJs
Nodejs使用archiver-zip-encrypted库加密压缩文件时报错(解决方案)
Nov 18 NodeJs
nodejs制作小爬虫功能示例
Feb 24 NodeJs
nodejs中的异步编程知识点详解
Jan 17 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 cookie 登录验证示例代码
2009/03/16 PHP
apache和php之间协同工作的配置经验分享
2013/04/08 PHP
PHP写的加密函数,支持私人密钥(详细介绍)
2013/06/09 PHP
深入解析PHP 5.3.x 的strtotime() 时区设定 警告信息修复
2013/08/05 PHP
php实现断点续传大文件示例代码
2020/06/19 PHP
Tinymce+jQuery.Validation使用产生的BUG
2010/03/29 Javascript
ie下jquery.getJSON的缓存问题的处理方法
2013/03/29 Javascript
js调用css属性写法
2013/09/21 Javascript
通过js获取div的background-image属性
2013/10/15 Javascript
浅谈JS原型对象和原型链
2016/03/02 Javascript
JavaScript实现重力下落与弹性效果的方法分析
2017/12/20 Javascript
Node解决简单重复问题系列之Excel内容的获取
2018/01/02 Javascript
Vuex持久化插件(vuex-persistedstate)解决刷新数据消失的问题
2019/04/16 Javascript
React中使用外部样式的3种方式(小结)
2019/05/28 Javascript
JS多个表单数据提交下的serialize()应用实例分析
2019/08/27 Javascript
小程序瀑布流组件实现翻页与图片懒加载
2020/05/19 Javascript
JS实现点击掉落特效
2021/01/29 Javascript
Python中处理时间的几种方法小结
2015/04/09 Python
python实现K近邻回归,采用等权重和不等权重的方法
2019/01/23 Python
Python 实现毫秒级淘宝抢购脚本的示例代码
2019/09/16 Python
利用python实现PSO算法优化二元函数
2019/11/13 Python
python3 webp转gif格式的实现示例
2019/12/10 Python
Python semaphore evevt生产者消费者模型原理解析
2020/03/18 Python
Python实现常见的几种加密算法(MD5,SHA-1,HMAC,DES/AES,RSA和ECC)
2020/05/09 Python
python的flask框架难学吗
2020/07/31 Python
使用anaconda安装pytorch的实现步骤
2020/09/03 Python
Hudson Jeans官网:高级精制牛仔裤
2018/11/28 全球购物
高级方案规划工程师岗位职责
2013/11/29 职场文书
餐饮加盟计划书
2014/01/10 职场文书
羽毛球社团活动总结
2014/06/27 职场文书
声乐专业大学生职业生涯规划书:理想的未来需要自己去打造
2014/09/20 职场文书
2014年党的群众路线活动个人整改措施
2014/10/28 职场文书
2015年政务公开工作总结
2015/05/19 职场文书
《圆的周长》教学反思
2016/02/17 职场文书
Pandas数据类型之category的用法
2021/06/28 Python
JavaScript 中for/of,for/in 的详细介绍
2021/11/17 Javascript