批量修改文件编码格式

摘要:
摘要:最近在制作手册的时候遇到了一个问题'文档乱码',查看文件之后发现文件编码不对,总共100多个文件,如果用编辑器另存为utf8,那就悲催了。所以自己就写了个程序,批量修改文件编码格式。代码:/***修改文件编码格式,例如:GBK转UTF8*支持多级目录*@param{String}[root_path][需要进行转码的文件路径]*@param{Array}[file_type][需要进行转码的文件格式,比如html文件]*@param{String}[from_code][文件的编码]*@param{String}[to_code][文件的目标编码]*///引入包varfs=require,iconv=require;//全局变量varroot_path='./html',file_type=['html','htm'],from_code='GBK',to_code='UTF8';/***判断元素是否在数组内*@date2015-01-13*@param{[String]}elem[被查找的元素]*@return{[bool]}[description]*/Array.prototype.inarray=function{"usestrict";varl=this.length;while(l--){if{returntrue;}}returnfalse;};/***转码函数*@date2015-01-13*@param{[String]}root[编码文件目录]*@return{[type]}[description]*/functionencodeFiles{"usestrict";varfiles=fs.readdirSync;files.forEach(function(file){varpathname=root+'/'+file,stat=fs.lstatSync(pathname);if(!
摘要:

最近在制作手册的时候遇到了一个问题'文档乱码',查看文件之后发现文件编码不对,总共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]
 */
functionencodeFiles(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) {
          throwerr;
        }
      });
    } else{
      encodeFiles(pathname);
    }
  });
}
encodeFiles(root_path);
小结:

上面的程序支持多级目录,同一个文件不能进行多次操作,否则又会出现乱码。

完整代码:https://github.com/baixuexiyang/coding,你可以fork到自己的账号下,如果有bug请在issue上提。

免责声明:文章转载自《批量修改文件编码格式》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇菜鸟笔记:在公司内网下搭好Java项目环境(IDEA、maven、svn)C#中导出EXCEL服务器端不用安装OFFICE下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

linux执行命令并获取结果(system)

执行系统命令,并返回输出的结果 首先需要了解mkstemp(): mkstemp()函数在系统中以唯一的文件名创建一个文件并打开,而且只有当前用户才能访问这个临时文件,并进行读、写操作。   mkstemp函数在系统中以唯一的文件名创建一个文件并打开,而且只有当前用户才能访问这个临时文件,并进行读、写操作。 mkstemp函数只有一个参数,这个参数是个...

基于SSM的数据库表字段查询应用

一、简介根据配置的数据源,可以查询该数据源下所有的数据库、表、以及字段说明。 二、前端代码<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <...

c# 扩展方法 奇思妙用 高级篇 九:OrderBy(string propertyName, bool desc)

下面是 Queryable 类 中最常用的两个排序的扩展方法: 1 2 public static IOrderedQueryable<TSource> OrderBy<TSource, TKey>(this IQueryable<TSource> source, Expression<Func<T...

微信app支付,完整流程,完整代码 (转)

微信app支付流程 需要的配置参数 private function wechat($body,$indent_id,$cou,$user_id,$total_fee,$ip,$domain,$nonce_str){ //微信配置信息和初始逻辑 $appid= WxPayConfig::APPID; //appid (微信开放平台的应用appid) $bo...

PageUtil 分页

/** * 分页工具类 * @author Administrator * */ public class PageUtil { /** * 生成分页代码 * @param targetUrl 目标地址 * @param totalNum 总记录数 * @param currentPage 当前页...

C# 时间戳与DateTime互转,使用 DateTimeOffset

/// <summary> /// 时间戳与DateTime互转 /// </summary> public class TicksTimeConvert { /* * 时间戳10位的是秒,13位的是毫秒 * * 1秒=1...