日期:2014-05-17  浏览次数:21023 次

C#编写项目编码格式转换器

本人是JAVA开发 由于开发的人多了 有的人开发环境编码格式也不同 有的是GBK 有的是UTF-8 代码中更是层出不穷

直接导致项目中中文的类乱码 写代码不能加注释的囧地 为了解决此问题编写了此软件 ?分享出来希望能帮助到其他人

部分代码如下:

?

 public int[] Count=new int[3];//存储计数信息
        public string SelectPath = null;//存储选择的路径
        private Profile profile = new Profile();
        string confitemp = "Configuration";//配置的总节点
        /// <summary>
        /// 判断文件编码格式是什么
        /// </summary>
        /// <param name="stream"></param>
        /// <returns></returns>
         public static Encoding GetEncoding(FileStream stream)
        {
            Encoding targetEncoding = Encoding.Default;
            if (stream != null && stream.Length >= 2)
            {
                //保存文件流的前4个字节
                byte byte1 = 0;
                byte byte2 = 0;
                byte byte3 = 0;
                byte byte4 = 0;
                //保存当前Seek位置
                long origPos = stream.Seek(0, SeekOrigin.Begin);
                stream.Seek(0, SeekOrigin.Begin);
                int nByte = stream.ReadByte();
                byte1 = Convert.ToByte(nByte);
                byte2 = Convert.ToByte(stream.ReadByte());
                if (stream.Length >= 3)
                {
                    byte3 = Convert.ToByte(stream.ReadByte());
                }
                if (stream.Length >= 4)
                {
                    byte4 = Convert.ToByte(stream.ReadByte());
                }
                //根据文件流的前4个字节判断Encoding
                //Unicode {0xFF, 0xFE};
                //BE-Unicode {0xFE, 0xFF};
                //UTF8 = {0xEF, 0xBB, 0xBF};
                if (byte1 == 0xFE && byte2 == 0xFF)//UnicodeBe
                {
                    targetEncoding = Encoding.BigEndianUnicode;
                }
                if (byte1 == 0xFF && byte2 == 0xFE && byte3 != 0xFF)//Unicode
                {
                    targetEncoding = Encoding.Unicode;
                }
                if (byte1 == 0xEF && byte2 == 0xBB && byte3 == 0xBF)//UTF8
                {
                    targetEncoding = Encoding.UTF8;
                }
                //恢复Seek位置       
                stream.Seek(origPos, SeekOrigin.Begin);
            }
            return targetEncoding;
        }
         /// <summary>
         /// 通过给定的文件流,判断文件的编码类型
         /// </summary>
         /// <param name="fs">文件流</param>
         /// <returns>文件的编码类型</returns>
         public Encoding GetType(FileStream fs)
         {
             byte[] Unicode = new byte[] { 0xFF, 0xFE, 0x41 };
             byte[] UnicodeBIG = new byte[] { 0xFE, 0xFF, 0x00 };
             byte[] UTF8 = new byte[] { 0xEF, 0xBB, 0xBF }; //带BOM
             Encoding reVal = Encoding.Default;
             BinaryReader r = new BinaryReader(fs,Encoding.Default);
             int i;
             int.TryParse(fs.Length.ToString(), out i);
             byte[] ss = r.ReadBytes(i);
             if (IsUTF8Bytes(ss) || (ss[0] == 0xEF && ss[1] == 0xBB && ss[2] == 0xBF))
             {
                 reVal = Encoding.UTF8;
             }
             else if (ss[0] == 0xFE && ss[1] == 0xFF && ss[2] == 0x00)
             {
                 reVal = Encoding.BigEndianUnicode;
             }
             else if (ss[0] == 0xFF && ss[1] == 0xFE && ss[2] == 0x41)
             {
                 reVal = Encoding.Unicode;
             }
             r.Close();
             return reVal;
         }
         /// <summary>
         /// 判断是否是不带 BOM 的 UTF8 格式
         /// </summary>
         /// <param name="data"></param>
         /// <returns></returns>
         private bool IsUTF8Bytes(byte[] data)
         {
             int charByteCounter = 1;  //计算当前正分析的字符应还有的字节数
             byte curByte; //当前分析的字节.
             for (int i = 0; i