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 相关文章推荐
PHPStorm 2020.1 调试 Nodejs的多种方法详解
Sep 17 NodeJs
nodejs win7下安装方法
May 24 NodeJs
初始Nodejs
Nov 08 NodeJs
NodeJS学习笔记之(Url,QueryString,Path)模块
Jan 13 NodeJs
你一定会收藏的Nodejs代码片段
Feb 04 NodeJs
Nodejs学习item【入门手上】
May 05 NodeJs
NodeJS整合银联网关支付(DEMO)
Nov 09 NodeJs
搭建简单的nodejs http服务器详解
Mar 09 NodeJs
nodejs操作mongodb的增删改查功能实例
Nov 09 NodeJs
NodeJs搭建本地服务器之使用手机访问的实例讲解
May 12 NodeJs
详解从NodeJS搭建中间层再谈前后端分离
Nov 13 NodeJs
M2实现Nodejs项目自动部署的方法步骤
May 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
php5编程中的异常处理详细方法介绍
2008/07/29 PHP
php设置session值和cookies的学习示例
2014/03/21 PHP
php结合ajax实现赞、顶、踩功能实例
2014/05/12 PHP
详谈PHP文件目录基础操作
2014/11/11 PHP
根据key删除数组中指定的元素实现方法
2017/03/02 PHP
给网站上的广告“加速”显示的方法
2007/04/08 Javascript
一个符号插入器 中用到的js代码
2007/09/04 Javascript
在IE6下发生Internet Explorer cannot open the Internet site错误
2010/06/21 Javascript
jquery修改属性值实例代码(设置属性值)
2014/01/06 Javascript
使用VS开发 Node.js指南
2015/01/06 Javascript
javascript创建对象的几种模式介绍
2016/05/06 Javascript
js传值后台中文出现乱码的解决方法
2016/06/30 Javascript
基于AGS JS开发自定义贴图图层
2017/03/31 Javascript
Angular2生命周期钩子函数的详细介绍
2017/07/10 Javascript
JavaScript 中Date对象的格式化代码方法汇总
2017/09/06 Javascript
详解使用uni-app开发微信小程序之登录模块
2019/05/09 Javascript
vue仿淘宝滑动验证码功能(样式模仿)
2019/12/10 Javascript
[05:35]DOTA2英雄梦之声_第13期_拉比克
2014/06/21 DOTA
[03:12]完美世界DOTA2联赛PWL DAY7集锦
2020/11/06 DOTA
简单解析Django框架中的表单验证
2015/07/17 Python
Python中装饰器高级用法详解
2017/12/25 Python
Python数据结构之双向链表的定义与使用方法示例
2018/01/16 Python
Python基于Floyd算法求解最短路径距离问题实例详解
2018/05/16 Python
python numpy数组的索引和切片的操作方法
2018/10/20 Python
如何利用Python分析出微信朋友男女统计图
2019/01/25 Python
Python中使用threading.Event协调线程的运行详解
2020/05/02 Python
CSS书写规范、顺序和命名规则
2014/03/06 HTML / CSS
法国和欧洲海边和滑雪度假:Pierre & Vacances
2017/01/04 全球购物
应聘护士自荐信
2013/10/21 职场文书
毕业生的自我鉴定该怎么写
2013/12/02 职场文书
校长竞聘演讲稿
2014/05/16 职场文书
产品陈列协议书(标准版)
2014/09/17 职场文书
通知函的格式
2015/04/27 职场文书
2015年企业团支部工作总结
2015/05/21 职场文书
初中政治教师教学反思
2016/02/23 职场文书
2016年幼儿园教研活动总结
2016/04/05 职场文书