zoukankan      html  css  js  c++  java
  • [原]C# Winform 文件编码批量转换工具

    在发布产品程序包时,往往需要对程序文件进行编码检查,写了一个可以批量修改文件编码格式的辅助工具,希望对有同样需求的童鞋有帮助。
    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 查看评论
  • 相关阅读:
    Windows控制台程序“选定模式”的问题
    落网的音乐很好听的,你造么?不能下载啊,怎么破?
    记一次复杂的正则匹配——匹配但不包含
    判断浏览器是否为IE内核的最简单的方法
    Nodejs发送Post请求时出现socket hang up错误的解决办法
    Windows下通过bat脚本实现自动上传文件到ftp服务器
    jQuery对html进行Encode和Decode
    scala学习笔记:理解类继承
    scala学习笔记:理解lazy值
    scala学习笔记:match表达式
  • 原文地址:https://www.cnblogs.com/zhangqs008/p/3773642.html
Copyright © 2011-2022 走看看