zoukankan      html  css  js  c++  java
  • 批量修改文件编码格式

    摘要:

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

  • 相关阅读:
    Windows编译openssl3
    【转】FFmpeg采集设备
    构建FFmpeg项目时链接报错avformat_alloc_context未定义
    anaconda代理设置
    静态链接导致的一个bug分析
    Qt如果发送信号过快会如何?
    关闭Edge浏览器多窗口Alt+Tab组合键切换
    [转]Windows上的valgrinddeleaker
    在qt项目中编译错误error ::clock未声明
    使用单元测试驱动开发的方式编写flask应用
  • 原文地址:https://www.cnblogs.com/xiyangbaixue/p/4223207.html
Copyright © 2011-2022 走看看