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调用cmd命令实现复制目录
May 04 NodeJs
Nodejs中session的简单使用及通过session实现身份验证的方法
Feb 04 NodeJs
进阶之初探nodeJS
Jan 24 NodeJs
windows 下安装nodejs 环境变量设置
Feb 02 NodeJs
nodejs+express实现文件上传下载管理网站
Mar 15 NodeJs
NodeJs使用Mysql模块实现事务处理实例
May 31 NodeJs
Nodejs模块载入运行原理
Feb 23 NodeJs
nodejs用gulp管理前端文件方法
Jun 24 NodeJs
深入理解nodejs搭建静态服务器(实现命令行)
Feb 05 NodeJs
nodejs微信开发之自动回复的实现
Mar 17 NodeJs
nodejs对mongodb数据库的增加修删该查实例代码
Jan 05 NodeJs
使用nodejs实现JSON文件自动转Excel的工具(推荐)
Jun 24 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 中的一些经验积累
2006/10/09 PHP
php array_merge下进行数组合并的代码
2008/07/22 PHP
用PHP实现读取和编写XML DOM代码
2010/04/07 PHP
php中smarty变量修饰用法实例分析
2015/06/11 PHP
使用WordPress发送电子邮件的相关PHP函数用法解析
2015/12/15 PHP
php创建桌面快捷方式实现方法
2015/12/31 PHP
Laravel 6 将新增为指定队列任务设置中间件的功能
2019/08/06 PHP
javascript 动态设置已知select的option的value值的代码
2009/12/16 Javascript
JS与框架页的操作代码
2010/01/17 Javascript
jQuery 方法大全方便学习参考
2010/02/25 Javascript
jquery分页插件AmSetPager(自写)
2013/04/15 Javascript
遍历DOM对象内的元素属性示例代码
2014/02/08 Javascript
Javascript中的Array数组对象详谈
2014/03/03 Javascript
angularjs中的单元测试实例
2014/12/06 Javascript
jQuery原理系列-css选择器的简单实现
2016/06/07 Javascript
ajax实现动态下拉框示例
2017/01/10 Javascript
浅谈Node.js轻量级Web框架Express4.x使用指南
2017/05/03 Javascript
Node.js连接mongodb实例代码
2017/06/06 Javascript
ES6学习教程之块级作用域详解
2017/10/09 Javascript
使用nvm和nrm优化node.js工作流的方法
2019/01/17 Javascript
详解vue+axios给开发环境和生产环境配置不同的接口地址
2019/08/16 Javascript
微信小程序实现搜索框功能及踩过的坑
2020/06/19 Javascript
解决antd日期选择组件,添加value就无法点击下一年和下一月问题
2020/10/29 Javascript
Python 模拟登陆的两种实现方法
2017/08/10 Python
Python+Socket实现基于TCP协议的客户与服务端中文自动回复聊天功能示例
2017/08/31 Python
详解python中的装饰器
2018/07/10 Python
CSS3改变浏览器滚动条样式
2019/01/04 HTML / CSS
大学生入党自我鉴定
2013/10/31 职场文书
本科毕业自我鉴定
2014/03/20 职场文书
党员公开承诺书和承诺事项
2014/03/25 职场文书
优秀毕业生找工作自荐信
2014/06/23 职场文书
演讲比赛的活动方案
2014/08/28 职场文书
2014机关干部学习“焦裕禄精神”思想汇报
2014/09/19 职场文书
运动会表扬稿
2015/01/16 职场文书
学校会议通知范文
2015/04/15 职场文书
MySQL数据库 安全管理
2022/05/06 MySQL