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.程序源码下载

  • 相关阅读:
    name mangling
    Haskell: What is Weak Head Normal Form
    取模运算和取余运算的区别
    a common method to rotate the image
    代码静态分析工具
    LeeCode-Single Number III
    七夕这天
    mysql TO_DAYS()
    (转)剖析Linux文件编码的查看及修改
    docker
  • 原文地址:https://www.cnblogs.com/zhangqs008/p/3773631.html
Copyright © 2011-2022 走看看