nodejs批量修改文件编码格式_node.js

摘要:
  最近在制作手册的时候遇到了一个问题'文档乱码',查看文件之后发现文件编码不对,总共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上提。

是不是非常不错呢,希望大家能够喜欢,有疑问就留言吧。

时间: 2024-10-27 21:39:01

nodejs批量修改文件编码格式_node.js的相关文章

EditPlus批量修改文件编码格式

今天才发现了Edit Plus有这么好用的功能,不仅能够批量转换文本编码,还能够批量转换文件格式(CR/LF).功能所在如下图所示:需要注意的是,能够被批量转换的文件都必须是已经打开的文件.如果需要修改的文件很多,而且文件夹很深,那么,可以使用Windows资源管理器的搜索功能,使用*.h通配符来查找,并拖入到EditPlus里面打开,然后批量转换.

Ubuntu如何查看和批量修改文件编码

我们都知道在Windows下文件编码默认为gbk或者是gb2312,但很多用户有时需要把Windows下的文件移到Linux系统中,所以转移后就经常出现乱码的情况,这该怎么办呢?接下来小编就给大家介绍下Ubuntu查看和批量修改文件编码的方法. 使用enca工具可以进行文件编码的查看. Ubuntu下的安装命令: sudo apt-get install enca enca查看文件 enca -L zh_CN file 查看文件编码 enca -L zh_CN -x UTF-8 file 更改文

如何批量修改文件后缀名?

  工具/原料 记事本 电脑 一. 查看显示文件扩展名 既然要修改文件的后缀名,那么我们首先应该查看一下文件的扩展名.(已经知道的直接看后面批量修改的部分) 方法1. 直接选择文件属性,即可查看文件的类型. 方法2 如果要直接显示文件后缀名,可以按照下面操作如下图. 下面以Xp为例,找到开始---控制面板-文件夹选项 3,点击查看-找到把"隐藏已知文件夹类型的扩展名"前面那个钩去掉然后应用 二.修改文件后缀名扩展名(手动修改) 已经能正常查看到文件后缀名了,如果要修改文件后缀名,扩展名

如何在Windows7中批量修改文件和文件夹的权限

  很多人在使用 Windows 7 专业版/企业版或旗舰版的时候会发现这样一个问题:如果希望对多个文件夹或文件设置权限,在选中这些文件夹和文件之后,点击鼠标右键,选择"属性",在"属性"对话框中只有"常规"和"自定义"两个选项卡,没有在之前版本的 Windows 中常见的安全选项卡.因此无法对这些文件夹或文件批量的进行权限修改. 操作步骤: 在选择多个文件或文件夹之后,属性对话框中没有"安全"选项卡,是设

批量修改文件后缀,有什么方法可以实现这个功能。

有很多时候我们需要进行这项功能,但是需要这个功能大部分是在处理图片上.如果你是要批量修改文件名的话,那么可以看下<win7实用小功能一键完成批量改照片名字 >. 1 批量修改文件后缀的准备工作: 把所有需要改后缀的文件遇到同个文件夹里面,文件里面别放不需要改后缀的文件.因为等下这个文件夹里面的后缀全部会变成一样的,如果你放了不需要改的文件,等下你又需要改回来. 2 在文件里面建个改所有文件后缀的小脚本. 新建一个记事本: 输入:ren *.cgi(现在文件的后缀) *.jpg(想要改成什么后缀

bat批处理批量修改文件扩展名的方法_DOS/BAT

有的时候我们可能会遇到,在一个文件夹内有很多个文件,我们需要修改这些文件的扩展名,当然我们可以一个一个的修改,可是如果有很多文件,那就很麻烦了,所以今天就教大家批量修改文件扩展名的方法,希望大家能够灵活运用. 这里假设你要把扩展名为.gif的文件都改成.jpg格式,那么具体方法如下: 1.首先进入需要改扩展名的文件夹内新建一个记事本 2.在记事本中输入如下内容 复制代码 代码如下: ren *.gif *.jpg 3.将记事本的扩展名改名为.bat 4.双击运行bat文件即可批量将该文件夹下的所

php实现批量修改文件名称的方法_php技巧

本文实例讲述了php实现批量修改文件名称的方法.分享给大家供大家参考,具体如下: <?php session_start(); set_time_limit(0); //function allfile($dir) // { // $files=array(); // if(is_file($dir)) // { // return $dir; // } // $handle = opendir($dir); // if($handle) { // while(false !== ($file

Linux中如何批量修改文件的扩展名

风信网(ithov.com)原创文章:在管理Linux的过程中,需要批量的对文件进行修改扩展名的操作,如果一个一个的修改,哪的确是一件非常痛苦的事,我们可以借助以下的方法以实现轻构.快速的批量修改文件扩展名. # for i in *.mp3; do mv $i `basehttp://www.aliyun.com/zixun/aggregation/11696.html">name $i .mp3`.bak ;done 将所有以.mp3结尾的文件扩展名修改为.mp3.bak结尾 在deb

NodeJS Web应用监听sock文件实例_node.js

像 NodeJS 写的 TCP 服务可以监听在某个 sock 文件(Domain Socket) 上,它的 HTTP 服务也能这么干.虽然作为 HTTP 服务连接某个 sock 文件的意义不大,所以这里只算是一个纯粹的尝试. TCP 服务是这样写 复制代码 代码如下: var net = require('net'); net.createServer(function (socket) {   socket.on('data', function (data) {     socket.wri