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+express(4.x+)实现文件上传功能
Nov 23 NodeJs
Nodejs中session的简单使用及通过session实现身份验证的方法
Feb 04 NodeJs
NodeJS连接MongoDB数据库时报错的快速解决方法
May 13 NodeJs
nodejs入门教程三:调用内部和外部方法示例
Apr 24 NodeJs
配置nodejs环境的方法
May 13 NodeJs
详解Windows下安装Nodejs步骤
May 18 NodeJs
Nodejs 和Session 原理及实战技巧小结
Aug 25 NodeJs
NodeJS简单实现WebSocket功能示例
Feb 10 NodeJs
CentOS7中源码编译安装NodeJS的完整步骤
Oct 13 NodeJs
nodejs 使用http进行post或get请求的实例(携带cookie)
Jan 03 NodeJs
nodejs中request库使用HTTPS代理的方法
Apr 30 NodeJs
详解利用nodejs对本地json文件进行增删改查
Sep 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
DC《小丑》11项提名领跑奥斯卡 Netflix成第92届奥斯卡提名最大赢家
2020/04/09 欧美动漫
php计算给定时间之前的函数用法实例
2015/04/03 PHP
PHP实现支付宝即时到账功能
2016/12/21 PHP
PHP执行shell脚本运行程序不产生core文件的方法
2016/12/28 PHP
Prototype 工具函数 学习
2009/07/23 Javascript
奉献给JavaScript初学者的编写开发的七个细节
2011/01/11 Javascript
javascript验证上传文件的类型限制必须为某些格式
2013/11/14 Javascript
Javascript实现返回上一页面并刷新的小例子
2013/12/11 Javascript
Get中文乱码IE浏览器Get中文乱码解决方案
2013/12/26 Javascript
JS获取网页属性包括宽、高等等
2014/04/03 Javascript
angularjs中的e2e测试实例
2014/12/06 Javascript
基于Jquery实现仿百度百科右侧导航代码附源码下载
2015/11/27 Javascript
详解Javascript事件驱动编程
2016/01/03 Javascript
js中DOM三级列表(代码分享)
2017/03/20 Javascript
JS继承与闭包及JS实现继承的三种方式
2017/10/15 Javascript
vue2.0s中eventBus实现兄弟组件通信的示例代码
2017/10/25 Javascript
深入浅析JavaScript中的in关键字和for-in循环
2020/04/20 Javascript
python 正则表达式 概述及常用字符
2009/05/04 Python
机器学习经典算法-logistic回归代码详解
2017/12/22 Python
PyCharm设置SSH远程调试的方法
2018/07/17 Python
浅谈python3.6的tkinter运行问题
2019/02/22 Python
python pptx复制指定页的ppt教程
2020/02/14 Python
python 邮件检测工具mmpi的使用
2021/01/04 Python
HTML5+CSS3应用详解
2014/02/24 HTML / CSS
分享29个基于Bootstrap的HTML5响应式网页设计模板
2015/11/19 HTML / CSS
打印机墨盒:123Inkjets
2017/02/16 全球购物
Rossignol金鸡美国官网:始于1907年法国百年雪具品牌
2019/03/06 全球购物
文秘自荐信
2013/10/20 职场文书
信息部岗位职责
2013/11/12 职场文书
旅游管理毕业生自荐书
2014/02/02 职场文书
公证书标准格式
2014/04/10 职场文书
班子四风对照检查材料思想汇报
2014/09/29 职场文书
保研推荐信格式
2015/03/25 职场文书
2015年大学团支部工作总结
2015/05/13 职场文书
催款函范文
2015/06/24 职场文书
Java中PriorityQueue实现最小堆和最大堆的用法
2021/06/27 Java/Android