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实现黑名单中间件设计
Jun 17 NodeJs
详谈nodejs异步编程
Dec 04 NodeJs
轻松创建nodejs服务器(6):作出响应
Dec 18 NodeJs
NodeJS学习笔记之MongoDB模块
Jan 13 NodeJs
nodejs 整合kindEditor实现图片上传
Feb 03 NodeJs
浅谈NodeJS中require路径问题
May 07 NodeJs
实例详解Nodejs 保存 payload 发送过来的文件
Jan 14 NodeJs
Nodejs 搭建简单的Web服务器详解及实例
Nov 30 NodeJs
浅谈nodejs中的类定义和继承的套路
Jul 26 NodeJs
nodejs判断文件、文件夹是否存在及删除的方法
Nov 10 NodeJs
在nodejs中创建child process的方法
Jan 26 NodeJs
node快速搭建后台的实现步骤
Feb 18 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排序算法类实例
2015/06/17 PHP
简单谈谈 php 文件锁
2017/02/19 PHP
PHP删除数组中特定元素的两种方法
2019/02/28 PHP
JavaScript 设计模式学习 Singleton
2009/07/27 Javascript
event.currentTarget与event.target的区别介绍
2012/12/31 Javascript
javascript获取所有同类checkbox选项(实例代码)
2013/11/07 Javascript
JavaScript实现数组在指定位置插入若干元素的方法
2015/04/06 Javascript
Bootstrap每天必学之标签与徽章
2015/11/27 Javascript
借助FileReader实现将文件编码为Base64后通过AJAX上传
2015/12/24 Javascript
解决给dom元素绑定click等事件无效问题的方法
2017/02/17 Javascript
详解如何在Vue2中实现组件props双向绑定
2017/03/29 Javascript
vue-axios使用详解
2017/05/10 Javascript
JavaScript实现提交模式窗口后刷新父窗口数据的方法
2017/06/16 Javascript
Vue实现按钮旋转和移动位置的实例代码
2018/08/09 Javascript
详解微信小程序的 request 封装示例
2018/08/21 Javascript
解决node.js含有%百分号时发送get请求时浏览器地址自动编码的问题
2019/11/20 Javascript
[49:41]NB vs NAVI Supermajor小组赛A组 BO3 第一场 6.2
2018/06/03 DOTA
详细探究Python中的字典容器
2015/04/14 Python
Python实现定时备份mysql数据库并把备份数据库邮件发送
2018/03/08 Python
Python利用matplotlib.pyplot绘图时如何设置坐标轴刻度
2018/04/09 Python
python实现二维数组的对角线遍历
2019/03/02 Python
PIL对上传到Django的图片进行处理并保存的实例
2019/08/07 Python
tensorflow使用CNN分析mnist手写体数字数据集
2020/06/17 Python
香港礼品网站:GiftU eshop
2017/09/01 全球购物
Berghaus官网:户外服装和设备,防水服
2020/01/17 全球购物
什么是虚拟内存?虚拟内存有什么优势?
2012/02/19 面试题
公益广告标语
2014/06/19 职场文书
城管执法人员纪律作风整顿思想汇报
2014/09/13 职场文书
外贸业务员岗位职责
2015/02/13 职场文书
护士自我推荐信范文
2015/03/24 职场文书
2015秋季小学开学寄语
2015/05/27 职场文书
2019年度开业庆典祝福语大全!
2019/07/05 职场文书
Nginx反爬虫策略,防止UA抓取网站
2021/03/31 Servers
为什么代码规范要求SQL语句不要过多的join
2021/06/23 MySQL
排查并解决Oracle sysaux表空间异常增长
2022/04/20 Oracle
Python内置类型集合set和frozenset的使用详解
2022/04/26 Python