在发布产品程序包时,往往需要对程序文件进行编码检查,写了一个可以批量修改文件编码格式的辅助工具,希望对有同样需求的童鞋有帮助。
1.程序界面:
2.核心代码:
        /// <summary>
/// 取得文件编码方式
/// </summary>
/// <param name="path"></param>
/// <returns></returns>
public Encoding GetFileEncode(string path)
{
FileStream fileStream = File.Open(path, FileMode.Open, FileAccess.ReadWrite);
var buffer = new byte[fileStream.Length];
if (buffer.Length <= 0 || buffer[0] < 239)
return Encoding.Default;
if (buffer[0] == 239 && buffer[1] == 187 && buffer[2] == 191)
return Encoding.UTF8;
if (buffer[0] == 254 && buffer[1] == byte.MaxValue)
return Encoding.BigEndianUnicode;
if (buffer[0] == byte.MaxValue && buffer[1] == 254)
return Encoding.Unicode;
return Encoding.Default;
}
/// <summary>
/// 取得文件编码方式
/// </summary>
/// <param name="buffer"></param>
/// <returns></returns>
private Encoding GetEncode(byte[] buffer)
{
if (buffer.Length <= 0 || buffer[0] < 239)
return Encoding.Default;
if (buffer[0] == 239 && buffer[1] == 187 && buffer[2] == 191)
return Encoding.UTF8;
if (buffer[0] == 254 && buffer[1] == byte.MaxValue)
return Encoding.BigEndianUnicode;
if (buffer[0] == byte.MaxValue && buffer[1] == 254)
return Encoding.Unicode;
return Encoding.Default;
} /// <summary>
/// 按指定编码方式读取文本
/// </summary>
/// <param name="buffer"></param>
/// <param name="encoding"></param>
/// <returns></returns>
private string GetTxt(byte[] buffer, Encoding encoding)
{
if (Equals(encoding, Encoding.UTF8))
return encoding.GetString(buffer, 3, buffer.Length - 3);
if (Equals(encoding, Encoding.BigEndianUnicode) || Equals(encoding, Encoding.Unicode))
return encoding.GetString(buffer, 2, buffer.Length - 2);
return encoding.GetString(buffer);
} /// <summary>
/// 读取文本(自适应编码方式)
/// </summary>
/// <param name="buffer"></param>
/// <returns></returns>
private string GetTxt(byte[] buffer)
{
return GetTxt(buffer, GetEncode(buffer));
} /// <summary>
/// 写入文本
/// </summary>
/// <param name="filepath">写入文件</param>
/// <param name="body">写入内容</param>
/// <param name="encoding">编码方式</param>
private void WriteTxt(string filepath, string body, Encoding encoding)
{
if (File.Exists(filepath))
File.Delete(filepath);
byte[] bytes = encoding.GetBytes(body);
FileStream fileStream = File.Open(filepath, FileMode.CreateNew, FileAccess.Write);
if (Equals(encoding, Encoding.UTF8))
{
fileStream.WriteByte(239);
fileStream.WriteByte(187);
fileStream.WriteByte(191);
}
else if (Equals(encoding, Encoding.BigEndianUnicode))
{
fileStream.WriteByte(254);
fileStream.WriteByte(byte.MaxValue);
}
else if (Equals(encoding, Encoding.Unicode))
{
fileStream.WriteByte(byte.MaxValue);
fileStream.WriteByte(254);
}
fileStream.Write(bytes, 0, bytes.Length);
fileStream.Flush();
fileStream.Close();
fileStream.Dispose();
}

3.程序源码下载


作者:a497785609 发表于2014-6-3 20:49:14 原文链接
阅读:19 评论:0 查看评论

[原]C# Winform 文件编码批量转换工具的更多相关文章

  1. C# Winform 文件编码批量转换工具

    在发布产品程序包时,往往需要对程序文件进行编码检查,写了一个可以批量修改文件编码格式的辅助工具,希望对有同样需求的童鞋有帮助. 1.程序界面: 2.核心代码: /// <summary> ...

  2. Java文件编码自动转换工具类(只改变编码,不会改变文件内容)

    本篇随笔主要介绍了一个用java语言写的将一个文件编码转换为另一个编码并不改变文件内容的工具类: 通过读取源文件内容,用URLEncoding重新编码解码的方式实现. public class Cha ...

  3. 【转载】Java文件编码自动转换工具类

    本篇随笔主要介绍了一个用java语言写的将一个文件编码转换为另一个编码并不改变文件内容的工具类: 通过读取源文件内容,用URLEncoding重新编码解码的方式实现. 1 public class C ...

  4. linux下GBK->UTF-8文件编码批量转换脚本

    find default -type d -exec mkdir -p utf/{} \;find default -type f -exec iconv -f GBK -t UTF-8 {} -o ...

  5. Linux下将UTF8编码批量转换成GB2312编码的方法

    Linux下将UTF8编码批量转换成GB2312编码的方法 在sqlplus中导入UTF8编码的sql脚本就会出现乱码错误,这时就需要将UTF8编码转换成GB2312编码,下面为大家介绍下在Linux ...

  6. 文件处理工具 gif合成工具 文件后缀批量添加工具 文件夹搜索工具 重复文件查找工具 网页图片解析下载工具等

    以下都是一些简单的免费分享的工具,技术支持群:592132877,提供定制化服务开发. Gif动图合成工具 主要功能是扫描指定的文件夹里的所有zip文件,然后提取Zip文件中的图片,并合成一张gif图 ...

  7. mac 查看文件编码及转换文件编码

    方法是用vim , vim 打开相应文件, :set fileencoding即可显示文件编码格式 将文件编码转换为utf-8 :set fileencoding=utf-8

  8. Gnu Linux下文件的字符编码及转换工具

    /*********************************************************************  * Author  : Samson  * Date   ...

  9. 利用iconv进行文件编码批量原地转换

    将当前目录及其所有子目录中的以 java 为后缀的文件,从 GB18030 转换为 UTF-8: find .  -name "*.java" -exec sh -c " ...

随机推荐

  1. iOS Xcode 调试技巧 全局断点这样加才有意思

    http://blog.sina.com.cn/s/blog_876a2c9901016ezh.html

  2. JS 显示时间与倒计时练习

    显示时间与倒计时 HTML <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...

  3. win7打开网页老是提示下载网页解决办法

    方法:我的系统是windows 7 旗舰版, 解决方法可以自己手动去修复,方法是进入命令窗口. 开始--运行--cmd--sfc.exe--sfc/scannow   修复一下!

  4. cocos基础教程(6)坐标与锚点讲解

    坐标系详解 Cocos2d-x坐标系和OpenGL坐标系相同,都是起源于笛卡尔坐标系.原点为屏幕左下角,x向右,y向上. 世界坐标系(World Coordinate) VS 本地坐标系(Node L ...

  5. cocos基础教程(4)基础概念介绍

    在Cocos2d-x-3.x引擎中,采用节点树形结构来管理游戏对象,一个游戏可以划分为不同的场景,一个场景又可以分为不同的层,一个层又可以拥有任意个可见的游戏节点(即对象,游戏中基本上所有的类都派生于 ...

  6. Unity3d 经验小结

      Unity3d 经验小结 文本教程 你是第2541个围观者 0条评论 供稿者:Jamesgary 标签:unity3d教程 Fbx.贴图导入Unity时的注意事项: 在导出Fbx之前,Maya中已 ...

  7. WinAPI: ExtCreateRegion - 区域变换

    转载:http://www.cnblogs.com/del/archive/2008/06/03/1212534.html 相似函数: SetWorldTransform 本例效果图: 代码文件: u ...

  8. windows下的C/C++精确计时

    由于我要测试线性筛法的速度,用上了C/C++精确计时.此时传统的clock()方法不够用了,我们需要另一种测量的办法,即CPUTicks/CPUFreq.如何实现呢? #include <win ...

  9. pro git 使用积累

    http://www.zhihu.com/question/20070065 git相关问题的收集 Git 是 Linux 之父 Linus Trovalds,为管理 Linux 内核代码而建立的,被 ...

  10. linux下统计当前目录下文件个数

    ls | wc -l 转自:http://bbs.csdn.net/topics/60387132