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代码实现计算交社保是否合适
Mar 09 NodeJs
NodeJS设计模式总结【单例模式,适配器模式,装饰模式,观察者模式】
Sep 06 NodeJs
nodejs 图片预览和上传的示例代码
Sep 30 NodeJs
Nodejs下使用gm圆形裁剪并合成图片的示例
Feb 22 NodeJs
nodejs基于express实现文件上传的方法
Mar 19 NodeJs
原生nodejs使用websocket代码分享
Apr 07 NodeJs
nodejs aes 加解密实例
Oct 10 NodeJs
Nodejs中的require函数的具体使用方法
Apr 02 NodeJs
Nodejs核心模块之net和http的使用详解
Apr 02 NodeJs
NodeJs实现简易WEB上传下载服务器
Aug 10 NodeJs
nodejs中使用archive压缩文件的实现代码
Nov 26 NodeJs
在NodeJs中使用node-schedule增加定时器任务的方法
Jun 08 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中设置多级目录session的问题
2011/08/08 PHP
PHP autoload与spl_autoload自动加载机制的深入理解
2013/06/05 PHP
提交表单后 PHP获取提交内容的实现方法
2016/05/25 PHP
PHP开发中解决并发问题的几种实现方法分析
2017/11/13 PHP
深入研究PHP中的preg_replace和代码执行
2018/08/15 PHP
Laravel 模型关联基础教程详解
2019/09/17 PHP
PHP迭代器和生成器用法实例分析
2019/09/28 PHP
采用call方式实现js继承
2014/05/20 Javascript
Javascript实现单张图片浏览
2014/12/18 Javascript
详解JSON1:使用TSQL查询数据和更新JSON数据
2016/11/21 Javascript
微信小程序 登录实例详解
2017/01/16 Javascript
jquery easyui dataGrid动态改变排序字段名的方法
2017/03/02 Javascript
Vee-Validate的使用方法详解
2017/09/22 Javascript
AngularJS select加载数据选中默认值的方法
2018/02/28 Javascript
vue2.0 实现导航守卫(路由守卫)
2018/05/21 Javascript
移动端 Vue+Vant 的Uploader 实现上传、压缩、旋转图片功能
2019/06/10 Javascript
Angular5整合富文本编辑器TinyMCE的方法(汉化+上传)
2020/05/26 Javascript
JS替换字符串中指定位置的字符(多种方法)
2020/05/28 Javascript
在Angular项目使用socket.io实现通信的方法
2021/01/05 Javascript
[02:16]卖萌的僵尸 DOTA2神话信使飞僵小宝来袭
2014/03/24 DOTA
Python编写的com组件发生R6034错误的原因与解决办法
2013/04/01 Python
Python 旋转打印各种矩形的方法
2019/07/09 Python
python3实现斐波那契数列(4种方法)
2019/07/15 Python
django自定义模板标签过程解析
2019/12/14 Python
详解Django配置JWT认证方式
2020/05/09 Python
html5 touch事件实现触屏页面上下滑动(二)
2016/03/10 HTML / CSS
Wedgwood英国官方网站:英式精致骨瓷餐具、礼品与生活精品,源于1759年
2019/09/02 全球购物
美国尼曼百货官网:Neiman Marcus
2019/09/05 全球购物
旅游饭店管理专业自荐书
2014/06/28 职场文书
医学检验专业自荐信
2014/09/18 职场文书
2014年语文教学工作总结
2014/12/17 职场文书
导游词之日月潭
2019/11/05 职场文书
深入详解JS函数的柯里化
2021/06/09 Javascript
Go语言实现Base64、Base58编码与解码
2021/07/26 Golang
CSS实现渐变色边框(Gradient borders)的5种方法
2022/03/25 HTML / CSS
Python自动操作神器PyAutoGUI的使用教程
2022/06/16 Python