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访问ActiveX对象,以操作Access数据库为例。
Dec 15 NodeJs
NodeJS学习笔记之Connect中间件模块(二)
Jan 27 NodeJs
基于nodejs+express(4.x+)实现文件上传功能
Nov 23 NodeJs
详解nodejs 文本操作模块-fs模块(四)
Dec 22 NodeJs
NodeJS 实现手机短信验证模块阿里大于功能
Jun 19 NodeJs
详解Nodejs 通过 fs.createWriteStream 保存文件
Oct 10 NodeJs
详解IWinter 一个路由转控制器的 Nodejs 库
Nov 15 NodeJs
nodejs中express入门和基础知识点学习
Sep 13 NodeJs
CentOS7中源码编译安装NodeJS的完整步骤
Oct 13 NodeJs
NodeJS实现一个聊天室功能
Nov 25 NodeJs
Nodejs + Websocket 指定发送及群聊的实现
Jan 09 NodeJs
nodeJS与MySQL实现分页数据以及倒序数据
Jun 05 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验证码代码
2012/02/27 PHP
纯JS实现动态时间显示代码
2014/02/08 Javascript
jquery使整个div区域可以点击的方法
2015/06/24 Javascript
基于javascript实现页面加载loading效果
2020/09/15 Javascript
jQuery flip插件实现的翻牌效果示例【附demo源码下载】
2016/09/20 Javascript
浅谈AngularJS中ng-class的使用方法
2016/11/11 Javascript
简单理解Vue条件渲染
2016/12/03 Javascript
Vue中render函数的使用方法
2018/01/31 Javascript
jQuery实现的下雪动画效果示例【附源码下载】
2018/02/02 jQuery
JS中实现一个下载进度条及播放进度条的代码
2019/06/10 Javascript
手写Vue弹窗Modal的实现代码
2019/09/11 Javascript
JS表格的动态操作完整示例
2020/01/13 Javascript
vue在线动态切换主题色方案
2020/03/26 Javascript
vue-router 控制路由权限的实现
2020/09/24 Javascript
python爬虫基本知识
2018/03/05 Python
基于Python实现定时自动给微信好友发送天气预报
2018/10/25 Python
python3爬虫怎样构建请求header
2018/12/23 Python
学习python可以干什么
2019/02/26 Python
Python Matplotlib实现三维数据的散点图绘制
2019/03/19 Python
Python完成毫秒级抢淘宝大单功能
2019/06/06 Python
python Django编写接口并用Jmeter测试的方法
2019/07/31 Python
使用python+whoosh实现全文检索
2019/12/09 Python
python环境下安装opencv库的方法
2020/03/05 Python
美国时尚配饰品牌:Dooney & Bourke
2017/11/14 全球购物
小橄榄树:Le Petit Olivier
2018/04/23 全球购物
什么是符号链接,什么是硬链接?符号链接与硬链接的区别是什么?
2014/01/19 面试题
实习会计求职自荐信范文
2014/03/10 职场文书
党员活动日总结
2014/05/05 职场文书
施工安全生产承诺书
2014/05/23 职场文书
李敖北大演讲稿
2014/05/24 职场文书
领导班子对照检查材料
2014/09/22 职场文书
2014年爱国卫生工作总结
2014/11/22 职场文书
2014普法依法治理工作总结
2014/12/18 职场文书
企业催款函范本
2015/06/24 职场文书
python pygame入门教程
2021/06/01 Python
python常见的占位符总结及用法
2021/07/02 Python