批量编码转化工具(实现文件编码的自动检测)

先看截图

工具对.c,.h,.cpp,.txt文件进行转换,其余类型文件,则仅仅拷贝到转换后的输出路径。这种处理是为了转换前和转换后的项目结构保持不变。

工具中一个重要的部分,是对文件编码的自动检测(选项为Auto的情况)

此部分使用了第三方组件(NonCodeNet)

调用代码如下:

public string getFileEncoding(string filePath)
        {
            string uni = string.Empty;
            Stream stream = File.Open(filePath, FileMode.Open, FileAccess.Read);
            BinaryReader binReader = new BinaryReader(stream);
            byte[] dat = new byte[stream.Length];
            binReader.Read(dat, 0, dat.Length);

            String cod = objNonCode.GetCodeName(ref dat, false);
            uni = changeCode(cod);

            binReader.Close();
            stream.Close();
            return uni;
        }
        private string changeCode(string cod)
        {
            string uni = string.Empty;
            switch (cod)
            {
                case "SJIS":
                    uni = "shift-jis";
                    break;
                case "JIS":
                    uni = "iso-2022-jp";
                    break;
                case "EUC":
                    uni = "euc-jp";
                    break;
                case "UNICODE":
                    uni = "utf-16";
                    break;
                case "UTF7":
                    uni = "utf-7";
                    break;
                case "UTF8":
                    uni = "utf-8";
                    break;
                //case "BIN":
                //    uni = "";
                //    break;
                default:
                    uni = "utf-8";
                    break;
            }
            return uni;
        }

具体的编码转换部分:

        private void encodeOneFile(string srcFile, string desFile, string strEncode, Encoding toEncode)
        {

            Encoding encode = Encoding.GetEncoding(strEncode);

            FileStream fsSrc = new FileStream(srcFile, FileMode.Open, FileAccess.Read);
            StreamReader srSrc = new StreamReader(fsSrc, encode);

            FileStream fsDes = new FileStream(desFile, FileMode.Create);

            StreamWriter swDes = new StreamWriter(fsDes, toEncode);

            long fileLength = fsSrc.Length;
            //8M缓冲区
            //byte[] buffer = new byte[8 * 1024 * 1024];
            char[] cbuff = new char[8 * 1024 * 1024];
            int readLength = srSrc.Read(cbuff, 0, cbuff.Length);

            long readCount = 0;
            while (readLength > 0)
            {
                //swDes.Write(buffer, 0, readLength);
                swDes.Write(cbuff, 0, readLength);
                readCount += readLength;
                int percentage = (int)(readCount * 100 / fileLength);
                //readLength = srSrc.Read(buffer, 0, buffer.Length);
                readLength = srSrc.Read(cbuff, 0, cbuff.Length);

            }
            srSrc.Close();
            fsSrc.Close();
            swDes.Close();
            fsDes.Close();
        }

实现编码转换的思路就是,以A编码打开文件srcPath/test.c,然后以B编码保存desPath/test.c,如此就实现了将文件test.c从A编码转为B编码。

好了,代码就不一一贴了,整个项目我已经打包上传到CSDN了,有需要的可以下载看看。

http://download.csdn.net/detail/geeking/8049169

另:上篇博客《c# 简易绘制C语言头文件包含关系图》中的代码存在致命bug,若H文件循环引用的话,会导致无线递归,直到堆栈溢出死掉。虽然临时修正好了,但仍然不完善,等完全修正好了,我再重新发资源吧。如果谁有更好的方法,还望不吝赐教,先行谢过。

时间: 2024-11-07 15:59:10

批量编码转化工具(实现文件编码的自动检测)的相关文章

native2ascii -- 编码转化工具

参考文档 http://blog.chinaunix.net/uid-692788-id-2681133.html 功能说明 Java 编译器和其它 Java 工具只能处理含有 Latin-1 和/或 Unicode 编码(udddd 记号)字符的文件.native2ascii 将含有其它字符编码的文件转换成含 Latin-1 和/或 Unicode 编码字符的文件.若省略 outputfile,则使用标准输出设备输出.此外,如果也省略 inputfile,则使用标准输入设备输入. 语法:nat

day03_09 编码部分历史及文件编码简介

详细课件:http://www.cnblogs.com/alex3714/articles/5465198.html 字符编码 支持中文的第一张表就是GB2312 1980 gb2312 6700+ 1995 gbk1.0 20000 2000 gb18030 27000 big5 台湾 unicode 万国码 支持所有国家和地区的编码 2^16 =  65535 = 存一个字符 统一占用2个字节 为了解决字符字节翻倍的问题,出现了UTF-8 UTF-8 = unicode 的扩展及,可变长的字

小工具之apk黑屏自动检测

在打包测试的时候经常发送给测试组之后,发现已进入游戏就黑屏,这个就浪费了测试组的精力,如果要测试多款产品的话,就会因为黑屏问题做很多无用功,这是程序就需要在发给测试的时候自己先测试产品会不会黑屏.同样,数量一多,就会浪费精力.需要先安装到设备上,在点击测试,浪费时间. 这是,你就需要一款全自动的测试工具来帮你检查产品是否黑屏,用不耗精力的方式把每个包的黑屏现象找出来.这就是接下来要介绍的工具——“黑屏检测工具”. 材料 按键精灵 海马玩模拟器 原理 利用按键精灵将产品在海马玩模拟器中打开,然后在

Linux下查看文件编码,文件编码格式转换和文件名编码转换

linux相关   2008-10-07 10:46   阅读1392   评论0   字号: 大大  中中  小小  如果你需要在Linux中 操作windows下的文件,那么你可能会经常遇到文件编码转换的问题.Windows中默认的文件格式是GBK(gb2312),而Linux一般都是 UTF-8.下面介绍一下,在Linux中如何查看文件的编码及如何进行对文件进行编码转换. 查看文件编码 在Linux中查看文件编码可以通过以下几种方式: 1.在Vim中可以直接查看文件编码 :set file

【转载】关于Python脚本开头两行的:#!/usr/bin/python和# -*- coding: utf-8 -*-的作用 – 指定文件编码类型

下面的内容来自:http://www.cnblogs.com/blueskylcc/p/5332642.html, 对方也是转的,不过没有找到转载的出处: 1.#!/usr/bin/python 是用来说明脚本语言是 python 的 是要用 /usr/bin下面的程序(工具)python,这个解释器,来解释 python 脚本,来运行 python 脚本的. 2.# -*- coding: utf-8 -*- 是用来指定文件编码为 utf-8 的 详情可以参考:PEP 0263 - Defin

TFS文件编码检查机制和修改(Team Foundation Server 2013)

TFS的版本控制系统会自动按照下面的标准检测代码文件的编码格式: 1. 首先,如果代码文件包含了BOM部分,则使用BOM中制定的编码格式打开文档 什么是BOM (Byte order mark)? http://en.wikipedia.org/wiki/Byte_order_mark 2. 如果代码文件没有BOM部分,TFS检测第一个千字节中的不可打印ASCII字符(unprintable ASCII character).如果第一个千字节中没有不可打印ASCII字符,则使用当前页面的编码设置

Linux解决乱码问题以及查看文件编码方式

在linux下操作windows下的文件,经常遇到文件乱码,现在就是不知道能不能改变linux系统的编码,就不要再对文件进行编码转换了 下面是昨天看的一点资料 如果你需要在Linux中操作windows下的文件,那么你可能会经常遇到文件编码转换的问题.Windows中默认的文件格式是GBK(gb2312),而Linux一般都是UTF-8.下面介绍一下,在Linux中如何查看文件的编码及如何进行对文件进行编码转换. 查看文件编码在Linux中查看文件编码可以通过以下几种方式:1.在Vim中可以直接

VIM查看文件编码 文件编码格式转换 文件名编码转换.

如果你需要在Linux中操作windows下的文件,那么你可能会经常遇到文件编码转换的问题.Windows中默认的文件格式是GBK(gb2312),而Linux一般都是UTF-8.下面介绍一下,在Linux中如何查看文件的编码及如何进行对文件进行编码转换. 查看文件编码在Linux中查看文件编码可以通过以下几种方式:1.在Vim中可以直接查看文件编码:set fileencoding即可显示文件编码格式.如果你只是想查看其它编码格式的文件或者想解决用Vim查看文件乱码的问题,那么你可以在~/.v

修改VISUAL STUDIO EXPRESS 2012新建C++文件编码

本站文章除注明转载外,均为本站原创或者翻译. 本站文章欢迎各种形式的转载,但请18岁以上的转载者注明文章出处,尊重我的劳动,也尊重你的智商: 本站部分原创和翻译文章提供markdown格式源码,欢迎使用文章源码进行转载: 本文标题:修改Visual Studio Express 2012新建C++文件编码 本文链接:http://zengrong.net/post/1900.htm 2013-12-03 更新:增加关于UTF-8(BOM)的说明 我突然发现Visual Studio Expres