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的前后端分离的思考与实践(四)安全问题解决方案
Sep 26 NodeJs
详谈nodejs异步编程
Dec 04 NodeJs
轻松创建nodejs服务器(2):nodejs服务器的构成分析
Dec 18 NodeJs
nodejs爬虫抓取数据之编码问题
Jul 03 NodeJs
Nodejs如何搭建Web服务器
Mar 28 NodeJs
在windows上用nodejs搭建静态文件服务器的简单方法
Aug 11 NodeJs
nodejs入门教程四:URL相关模块用法分析
Apr 24 NodeJs
ajax +NodeJS 实现图片上传实例
Jun 06 NodeJs
浅谈nodejs中的类定义和继承的套路
Jul 26 NodeJs
详解nodejs中express搭建权限管理系统
Sep 15 NodeJs
通过nodejs 服务器读取HTML文件渲染到页面的方法
May 17 NodeJs
Nodejs文件上传、监听上传进度的代码
Mar 27 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
咖啡与水的关系
2021/03/03 冲泡冲煮
PHP实现把数字ID转字母ID
2013/08/12 PHP
php统计时间和内存使用情况示例分享
2014/03/13 PHP
标准PHP的AES加密算法类
2015/03/12 PHP
简单解决新浪SAE无法上传文件的问题
2015/05/13 PHP
PHP统计目录中文件以及目录中目录大小的方法
2016/01/09 PHP
javascript入门·对象属性方法大总结
2007/10/01 Javascript
textarea不能通过maxlength属性来限制字数的解决方法
2014/09/01 Javascript
【经验总结】编写JavaScript代码时应遵循的14条规律
2016/06/20 Javascript
js利用正则表达式检验输入内容是否为网址
2016/07/05 Javascript
JS图片放大效果简单实现代码
2016/09/08 Javascript
JQuery实现列表中复选框全选反选功能封装(推荐)
2016/11/24 Javascript
微信小程序实现图片轮播及文件上传
2017/04/07 Javascript
jquery ui sortable拖拽后保存位置
2017/04/27 jQuery
详解vue-cli 脚手架项目-package.json
2017/07/04 Javascript
JavaScript贪吃蛇小组件实例代码
2017/08/20 Javascript
Node.js中sequelize时区的配置方法
2017/12/10 Javascript
vue 组件的封装之基于axios的ajax请求方法
2018/08/11 Javascript
layui使用表格渲染获取行数据的例子
2019/09/13 Javascript
原生JS与CSS实现软件卸载对话框功能
2019/12/05 Javascript
vue-axios同时请求多个接口 等所有接口全部加载完成再处理操作
2020/11/09 Javascript
[02:47]3.19DOTA2发布会 国服成长历程回顾
2014/03/25 DOTA
[02:27]DOTA2英雄基础教程 莱恩
2014/01/17 DOTA
Python中的作用域规则详解
2015/01/30 Python
Python基于PyGraphics包实现图片截取功能的方法
2017/12/21 Python
Python hexstring-list-str之间的转换方法
2019/06/12 Python
django的分页器Paginator 从django中导入类
2019/07/25 Python
python3跳出一个循环的实例操作
2020/08/18 Python
python爬虫利用代理池更换IP的方法步骤
2021/02/21 Python
CSS3属性使网站设计增强同时不消弱可用性
2009/08/29 HTML / CSS
泰国折扣酒店预订:Hotels2Thailand
2018/03/20 全球购物
C语言怎样定义和声明全局变量和函数最好
2013/11/26 面试题
教师年度考核自我评鉴
2015/08/11 职场文书
2016年党员创先争优公开承诺书
2016/03/25 职场文书
Django中session进行权限管理的使用
2021/07/09 Python
【DOTA2】总决赛血虐~ XTREME GAMING vs MAGMA - OGA DOTA PIT 2022 CN
2022/04/02 DOTA