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 11 NodeJs
在NodeJS中启用ECMAScript 6小结(windos以及Linux)
Jul 15 NodeJs
nodejs开发环境配置与使用
Nov 17 NodeJs
Nodejs的express使用教程
Nov 23 NodeJs
浅析Nodejs npm常用命令
Jun 14 NodeJs
nodejs微信公众号支付开发
Sep 19 NodeJs
解决nodejs中使用http请求返回值为html时乱码的问题
Feb 18 NodeJs
详解nodejs爬虫程序解决gbk等中文编码问题
Apr 06 NodeJs
Nodejs下使用gm圆形裁剪并合成图片的示例
Feb 22 NodeJs
NodeJs入门教程之定时器和队列
Mar 08 NodeJs
nodejs中request库使用HTTPS代理的方法
Apr 30 NodeJs
浅谈使用nodejs搭建web服务器的过程
Jul 20 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
jQuery Mobile + PHP实现文件上传
2014/12/12 PHP
完美解决在ThinkPHP控制器中命名空间的问题
2017/05/05 PHP
php实现表单提交上传文件功能
2018/05/28 PHP
yii框架结合charjs实现统计30天数据的方法
2020/04/04 PHP
Javascript继承机制的设计思想分享
2011/08/28 Javascript
IE中jquery.form中ajax提交没反应解决方法分享
2012/09/11 Javascript
jQuery使用一个按钮控制图片的伸缩实现思路
2013/04/19 Javascript
JS.findElementById()使用介绍
2013/09/21 Javascript
JS数组的遍历方式for循环与for...in
2014/07/31 Javascript
jQuery webuploader分片上传大文件
2016/11/07 Javascript
微信小程序 高德地图SDK详解及简单实例(源码下载)
2017/01/11 Javascript
JavaScript中动态向表格添加数据
2017/01/24 Javascript
EasyUI在Panel上动态添加LinkButton按钮
2017/08/11 Javascript
Vue实战之vue登录验证的实现代码
2017/10/31 Javascript
微信小程序上传图片功能(附后端代码)
2020/06/19 Javascript
vue mounted 调用两次的完美解决办法
2018/10/29 Javascript
微信JS-SDK updateAppMessageShareData安卓不能自定义分享详解
2019/03/29 Javascript
vue cli4.0项目引入typescript的方法
2020/07/17 Javascript
[01:21:58]守擂赛DOTA2第一周决赛
2020/04/22 DOTA
Python中的tuple元组详细介绍
2015/02/02 Python
Python读取键盘输入的2种方法
2015/06/16 Python
python中异常报错处理方法汇总
2016/11/20 Python
如何在python中使用selenium的示例
2017/12/26 Python
Python定时任务sched模块用法示例
2018/07/16 Python
python中pika模块问题的深入探究
2018/10/13 Python
什么是Python变量作用域
2020/06/03 Python
详解numpy.ndarray.reshape()函数的参数问题
2020/10/13 Python
Python的Tqdm模块实现进度条配置
2021/02/24 Python
个人担保书格式范文
2014/05/12 职场文书
群众路线教育实践活动心得体会(教师)
2014/10/31 职场文书
先进单位事迹材料
2014/12/25 职场文书
银行招聘自荐信
2015/03/06 职场文书
2015年超市员工工作总结
2015/05/04 职场文书
2016应届毕业生实习心得体会
2015/10/09 职场文书
深入解析MySQL索引数据结构
2021/10/16 MySQL
解决Mysql中的innoDB幻读问题
2022/04/29 MySQL