在发布产品程序包时,往往需要对程序文件进行编码检查,写了一个可以批量修改文件编码格式的辅助工具,希望对有同样需求的童鞋有帮助。
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. MyBatis查询传一个参数时报错:There is no getter for property named 'sleevetype' in 'class java.lang.Integer

    用MyBatis进行查询,传入参数只有一个时(非Map)如int,报错 There is no getter for property named 'sleevetype' in 'class jav ...

  2. Redis Cluster 理论知识

    http://www.ttlsa.com/redis/redis-cluster-theoretical-knowledge/ Redis 集群的 TCP 端口(Redis Cluster TCP p ...

  3. DedeCMS V5.7 Dialog目录下配置文件XSS漏洞

    漏洞地址及证明:/include/dialog/config.php?adminDirHand="/></script><script>alert(1);< ...

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

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

  5. centOS6.4 extundelete工具恢复rm -rf 删除的目录

    PS:补充下,我在fedora 19上运行的时候遇到的一个问题: [root@localhost extundelete-]# ./configure Configuring extundelete ...

  6. 理解css中的line-height

    在css中,line-height有下面五种可能的值:我们来看看w3c中列出如下可能值: normal:默认,设置合理的行间距. number:设置数字,此数字会与当前的字体尺寸相乘来设置行间距. l ...

  7. $key 的用法

    <?php $attr=array("a","b","c","d"); //$key,默认是主键值,$value, ...

  8. 微信和WeChat的合并月活跃账户数达到7.62亿了

    昨日,腾讯公布了截至2016年3月31日未经审核的第一季度综合业绩,其中财报显示微信和WeChat的合并月活跃账户数达到7.62亿,比去年同期增长39%.网络广告业务的收入同比增长73%至2016年第 ...

  9. Currency Exchange(Bellman-ford)

    Currency Exchange Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 21349   Accepted: 765 ...

  10. 【视频】从零开始编写第一个PHP扩展

    Rango会讲解在Linux下从零开始写一个PHP扩展,并编译安装到PHP里,一直到执行扩展中的函数.包含的内容有: 为什么要开发PHP扩展 ext_skel工具的使用 修改config.m4 php ...