C#判断文件编码——常用字法
使用中文写文章,当篇幅超过一定程度,必然会使用到诸如:“的”、“你”、“我”这样的常用字。本类思想便是提取中文最常用的一百个字,使用中文世界常用编码(主要有GBK、GB2312、GB18030、UTF-8、UTF-32、Unicode、BigEndianUnicode及UTF-7等)获得其编码字节,以其为搜索词到目标流进行查找,如果查找得到则表示该流使用此种编码。显而易见此类不适用于小篇幅。
- using System.Collections.Generic;
- using System.IO;
- using System.Text;
- namespace YunShenBuZhiChu.MiMaBenJiaMiFa
- {
- /// <summary>
- /// 文字编码检测。
- /// 用于检测一篇文章使用什么编码方式进行编码。
- /// </summary>
- public class StreamBianMaJianCe
- {
- /// <summary>
- /// BigEndianUnicode编码高频汉字编码
- /// </summary>
- private List<byte[]> _BigEndianUnicodeGaoPinZiFuBianMaLsit = new List<byte[]>()
- {
- new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},
- new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},
- new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},
- new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},
- new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},
- new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},
- new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},
- new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},
- new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},
- new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},
- new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},
- new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},
- new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,}
- };
- /// <summary>
- /// UTF8编码高频汉字编码
- /// </summary>
- private List<byte[]> _UTF8GaoPinZiFuBianMaLsit = new List<byte[]>()
- {
- new byte[]{,,},new byte[]{,,},new byte[]{,,},new byte[]{,,},new byte[]{,,},new byte[]{,,},
- new byte[]{,,},new byte[]{,,},new byte[]{,,},new byte[]{,,},new byte[]{,,},new byte[]{,,},
- new byte[]{,,},new byte[]{,,},new byte[]{,,},new byte[]{,,},new byte[]{,,},new byte[]{,,},
- new byte[]{,,},new byte[]{,,},new byte[]{,,},new byte[]{,,},new byte[]{,,},new byte[]{,,},
- new byte[]{,,},new byte[]{,,},new byte[]{,,},new byte[]{,,},new byte[]{,,},new byte[]{,,},
- new byte[]{,,},new byte[]{,,},new byte[]{,,},new byte[]{,,},new byte[]{,,},new byte[]{,,},
- new byte[]{,,},new byte[]{,,},new byte[]{,,},new byte[]{,,},new byte[]{,,},new byte[]{,,},
- new byte[]{,,},new byte[]{,,},new byte[]{,,},new byte[]{,,},new byte[]{,,},new byte[]{,,},
- new byte[]{,,},new byte[]{,,},new byte[]{,,},new byte[]{,,},new byte[]{,,},new byte[]{,,},
- new byte[]{,,},new byte[]{,,},new byte[]{,,},new byte[]{,,},new byte[]{,,},new byte[]{,,},
- new byte[]{,,},new byte[]{,,},new byte[]{,,},new byte[]{,,},new byte[]{,,},new byte[]{,,},
- new byte[]{,,},new byte[]{,,},new byte[]{,,},new byte[]{,,},new byte[]{,,},new byte[]{,,},
- new byte[]{,,},new byte[]{,,},new byte[]{,,},new byte[]{,,},new byte[]{,,},new byte[]{,,},
- new byte[]{,,},new byte[]{,,},new byte[]{,,},new byte[]{,,},new byte[]{,,},new byte[]{,,},
- new byte[]{,,},new byte[]{,,},new byte[]{,,},new byte[]{,,},new byte[]{,,},new byte[]{,,},
- new byte[]{,,},new byte[]{,,},new byte[]{,,},new byte[]{,,},new byte[]{,,},new byte[]{,,},
- new byte[]{,,},new byte[]{,,},new byte[]{,,},new byte[]{,,},new byte[]{,,},new byte[]{,,},
- new byte[]{,,},new byte[]{,,},
- };
- /// <summary>
- /// Unicode编码高频汉字编码
- /// </summary>
- private List<byte[]> _UnicodeGaoPinZiFuBianMaLsit = new List<byte[]>()
- {
- new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},
- new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},
- new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},
- new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},
- new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},
- new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},
- new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},
- new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},
- new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},
- new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},
- new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},
- new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},
- new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,}
- };
- /// <summary>
- /// UTF32编码高频汉字编码
- /// </summary>
- private List<byte[]> _UTF32GaoPinZiFuBianMaLsit = new List<byte[]>()
- {
- new byte[]{,,,},new byte[]{,,,},new byte[]{,,,},new byte[]{,,,},new byte[]{,,,},new byte[]{,,,},new byte[]{,,,},
- new byte[]{,,,},new byte[]{,,,},new byte[]{,,,},new byte[]{,,,},new byte[]{,,,},new byte[]{,,,},new byte[]{,,,},
- new byte[]{,,,},new byte[]{,,,},new byte[]{,,,},new byte[]{,,,},new byte[]{,,,},new byte[]{,,,},new byte[]{,,,},
- new byte[]{,,,},new byte[]{,,,},new byte[]{,,,},new byte[]{,,,},new byte[]{,,,},new byte[]{,,,},new byte[]{,,,},
- new byte[]{,,,},new byte[]{,,,},new byte[]{,,,},new byte[]{,,,},new byte[]{,,,},new byte[]{,,,},new byte[]{,,,},
- new byte[]{,,,},new byte[]{,,,},new byte[]{,,,},new byte[]{,,,},new byte[]{,,,},new byte[]{,,,},new byte[]{,,,},
- new byte[]{,,,},new byte[]{,,,},new byte[]{,,,},new byte[]{,,,},new byte[]{,,,},new byte[]{,,,},new byte[]{,,,},
- new byte[]{,,,},new byte[]{,,,},new byte[]{,,,},new byte[]{,,,},new byte[]{,,,},new byte[]{,,,},new byte[]{,,,},
- new byte[]{,,,},new byte[]{,,,},new byte[]{,,,},new byte[]{,,,},new byte[]{,,,},new byte[]{,,,},new byte[]{,,,},
- new byte[]{,,,},new byte[]{,,,},new byte[]{,,,},new byte[]{,,,},new byte[]{,,,},new byte[]{,,,},new byte[]{,,,},
- new byte[]{,,,},new byte[]{,,,},new byte[]{,,,},new byte[]{,,,},new byte[]{,,,},new byte[]{,,,},new byte[]{,,,},
- new byte[]{,,,},new byte[]{,,,},new byte[]{,,,},new byte[]{,,,},new byte[]{,,,},new byte[]{,,,},new byte[]{,,,},
- new byte[]{,,,},new byte[]{,,,},new byte[]{,,,},new byte[]{,,,},new byte[]{,,,},new byte[]{,,,},new byte[]{,,,},
- new byte[]{,,,},new byte[]{,,,},new byte[]{,,,},new byte[]{,,,},new byte[]{,,,},new byte[]{,,,},new byte[]{,,,},
- new byte[]{,,,},new byte[]{,,,},new byte[]{,,,},new byte[]{,,,},new byte[]{,,,},new byte[]{,,,}
- };
- /// <summary>
- /// UTF7编码高频汉字编码
- /// </summary>
- private List<byte[]> _UTF7GaoPinZiFuBianMaLsit = new List<byte[]>()
- {
- new byte[]{,,,,},new byte[]{,,,,},new byte[]{,,,,},new byte[]{,,,,},new byte[]{,,,,},new byte[]{,,,,},
- new byte[]{,,,,},new byte[]{,,,,},new byte[]{,,,,},new byte[]{,,,,},new byte[]{,,,,},new byte[]{,,,,},
- new byte[]{,,,,},new byte[]{,,,,},new byte[]{,,,,},new byte[]{,,,,},new byte[]{,,,,},new byte[]{,,,,},
- new byte[]{,,,,},new byte[]{,,,,},new byte[]{,,,,},new byte[]{,,,,},new byte[]{,,,,},new byte[]{,,,,},
- new byte[]{,,,,},new byte[]{,,,,},new byte[]{,,,,},new byte[]{,,,,},new byte[]{,,,,},new byte[]{,,,,},
- new byte[]{,,,,},new byte[]{,,,,},new byte[]{,,,,},new byte[]{,,,,},new byte[]{,,,,},new byte[]{,,,,},
- new byte[]{,,,,},new byte[]{,,,,},new byte[]{,,,,},new byte[]{,,,,},new byte[]{,,,,},new byte[]{,,,,},
- new byte[]{,,,,},new byte[]{,,,,},new byte[]{,,,,},new byte[]{,,,,},new byte[]{,,,,},new byte[]{,,,,},
- new byte[]{,,,,},new byte[]{,,,,},new byte[]{,,,,},new byte[]{,,,,},new byte[]{,,,,},new byte[]{,,,,},
- new byte[]{,,,,},new byte[]{,,,,},new byte[]{,,,,},new byte[]{,,,,},new byte[]{,,,,},new byte[]{,,,,},
- new byte[]{,,,,},new byte[]{,,,,},new byte[]{,,,,},new byte[]{,,,,},new byte[]{,,,,},new byte[]{,,,,},
- new byte[]{,,,,},new byte[]{,,,,},new byte[]{,,,,},new byte[]{,,,,},new byte[]{,,,,},new byte[]{,,,,},
- new byte[]{,,,,},new byte[]{,,,,},new byte[]{,,,,},new byte[]{,,,,},new byte[]{,,,,},new byte[]{,,,,},
- new byte[]{,,,,},new byte[]{,,,,},new byte[]{,,,,},new byte[]{,,,,},new byte[]{,,,,},new byte[]{,,,,},
- new byte[]{,,,,},new byte[]{,,,,},new byte[]{,,,,},new byte[]{,,,,},new byte[]{,,,,},new byte[]{,,,,},
- new byte[]{,,,,},new byte[]{,,,,},new byte[]{,,,,},new byte[]{,,,,},new byte[]{,,,,},new byte[]{,,,,},
- new byte[]{,,,,},new byte[]{,,,,},new byte[]{,,,,},new byte[]{,,,,},new byte[]{,,,,},new byte[]{,,,,},
- new byte[]{,,,,},new byte[]{,,,,}
- };
- /// <summary>
- /// GB18030编码高频汉字编码
- /// </summary>
- private List<byte[]> _GB18030GaoPinZiFuBianMaLsit = new List<byte[]>()
- {
- new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},
- new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},
- new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},
- new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},
- new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},
- new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},
- new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},
- new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},
- new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},
- new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},
- new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},
- new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,},new byte[]{,}
- };
- /// <summary>
- /// 表示需要猜测编码的流。
- /// </summary>
- private Stream _thisStream;
- /// <summary>
- /// 构造函数
- /// </summary>
- /// <param name="_canShuStream">参数流</param>
- public StreamBianMaJianCe(Stream _canShuStream)
- {
- if (_canShuStream == null || _canShuStream.Length < )
- {
- throw new System.NullReferenceException("WenZiBianMaJianCe构造函数参数_canShuStream不能为空且长度不能小于100");
- }
- _thisStream = _canShuStream;
- }
- /// <summary>
- /// 检测。
- /// </summary>
- /// <returns>流的编码</returns>
- public Encoding JianCe()
- {
- byte[] _streamByte = DuQuWeiZiJie();
- Encoding _returnEncoding = Encoding.UTF8;
- //通过BOM头来判断编码,有BOM头也就没必要去猜了。
- if (GenJuBomCaiBianMa(_streamByte, out _returnEncoding) == false)
- {
- _returnEncoding = CaiJieWenZiBianMa(_streamByte);
- }
- return _returnEncoding;
- }
- /// <summary>
- /// 读取数据为字节。
- /// </summary>
- /// <returns></returns>
- private byte[] DuQuWeiZiJie()
- {
- BinaryReader _BinaryReader = new BinaryReader(_thisStream);
- byte[] _returnByte = new byte[_thisStream.Length];
- //判断流的长度。
- if (_thisStream.Length < (long)int.MaxValue)//小于整型值的情况
- {
- _BinaryReader.Read(_returnByte, , (int)_thisStream.Length);
- }
- else//大于整型值的情况
- {
- long _index = ;
- while (_index < _returnByte.Length)
- {
- _returnByte.CopyTo(_BinaryReader.ReadBytes(), _index);
- _index = _index + 1024L;
- }
- }
- return _returnByte;
- }
- /// <summary>
- /// 根据BOM头返回编码格式。
- /// </summary>
- /// <param name="_streamByte">流的字节组。</param>
- /// <returns></returns>
- private bool GenJuBomCaiBianMa(byte[] _streamByte, out Encoding _ruCanEncoding)
- {
- //132 49 149 51 GB-18030
- if (_streamByte[] == && _streamByte[] == && _streamByte[] == && _streamByte[] == )
- {
- _ruCanEncoding = Encoding.GetEncoding("GB-18030");
- return true;
- }
- //239 187 191 UTF-8
- if (_streamByte[] == && _streamByte[] == && _streamByte[] == )
- {
- _ruCanEncoding = Encoding.UTF8;
- return true;
- }
- //254 255 Unicode
- if (_streamByte[] == && _streamByte[] == )
- {
- _ruCanEncoding = Encoding.Unicode;
- return true;
- }
- if (_streamByte[] == && _streamByte[] == )
- {
- //255 254 0 0 UTF-32
- if (_streamByte[] == && _streamByte[] == )
- {
- _ruCanEncoding = Encoding.UTF32;
- }
- //255 254 BigEndianUnicode
- _ruCanEncoding = Encoding.BigEndianUnicode;
- return true;
- }
- //43 47 118 UTF-7
- if (_streamByte[] == && _streamByte[] == && _streamByte[] == )
- {
- //[ 56 | 57 | 43 | 47 ]
- if (_streamByte[] == || _streamByte[] == || _streamByte[] == || _streamByte[] == )
- {
- _ruCanEncoding = Encoding.UTF7;
- return true;
- }
- }
- _ruCanEncoding = null;
- return false;
- }
- /// <summary>
- /// 猜解文字编码,适用于没有BOM头的情况。
- /// </summary>
- /// <param name="_streamByte">流的字节组。</param>
- /// <returns></returns>
- private Encoding CaiJieWenZiBianMa(byte[] _streamByte)
- {
- //按照中文世界编码使用概率确定猜解顺序。
- //UTF8
- if (GaoPinZiJianCeUFT8(_streamByte) == true)
- {
- return Encoding.UTF8;
- }
- //gb18030
- if (GaoPinZiJianCeGB18030(_streamByte) == true)
- {
- return Encoding.GetEncoding("gb18030");
- }
- //UTF7
- if (GaoPinZiJianCeUTF7(_streamByte) == true)
- {
- return Encoding.UTF7;
- }
- //UTF-32任何字符都以四个字节编码,必然可以被四整除
- if (_streamByte.Length % == )
- {
- if (GaoPinZiJianCeUTF32(_streamByte) == true)//UTF32
- {
- return Encoding.UTF32;
- }
- }
- //BigEndianUnicode和Unicode任何字符都以二个字节编码,必然可以被二整除
- if (_streamByte.Length % == )
- {
- //Unicode
- if (GaoPinZiJianCeUnicode(_streamByte) == true)
- {
- return Encoding.Unicode;
- }
- //BigEndianUnicod
- if (GaoPinZiJianCeBigEndianUnicode(_streamByte) == true)
- {
- return Encoding.BigEndianUnicode;
- }
- }
- //如果上述猜解都失败了,则返回UTF-8。
- return Encoding.UTF8;
- }
- /// <summary>
- /// 高频字检查法,UFT8编码方法
- /// </summary>
- /// <param name="_streamByte">流字节组</param>
- /// <returns></returns>
- private bool GaoPinZiJianCeUFT8(byte[] _streamByte)
- {
- //命中次数。
- int _mingZhongCiShu = ;
- foreach (byte[] bShuZu in _UTF8GaoPinZiFuBianMaLsit)
- {
- for (int i = ; i < _streamByte.Length; i++)
- {
- //判断首编码是否相等
- if (bShuZu[] == _streamByte[i])
- {
- //如果首字节相等,则检查后面二个字节是否也相等
- if ((i + < _streamByte.Length && _streamByte[i + ] == bShuZu[])
- && (i + < _streamByte.Length && _streamByte[i + ] == bShuZu[]))
- {
- _mingZhongCiShu++;
- }
- }
- }
- //UTF-8有一定几率与其他编码冲突,故而增加命中次数,减少误差。
- if (_mingZhongCiShu > )
- {
- return true;
- }
- }
- return false;
- }
- /// <summary>
- /// 高频字检查法,Unicode编码方法
- /// </summary>
- /// <param name="_streamByte">流字节组</param>
- /// <returns></returns>
- private bool GaoPinZiJianCeUnicode(byte[] _streamByte)
- {
- foreach (byte[] bShuZu in _UnicodeGaoPinZiFuBianMaLsit)
- {
- for (int i = ; i < _streamByte.Length; i++)
- {
- //判断首编码是否相等
- if (bShuZu[] == _streamByte[i]
- && (i + < _streamByte.Length && _streamByte[i + ] == bShuZu[]))
- {
- //如果首字节相等,则检查后面二个字节是否也相等
- return true;
- }
- }
- }
- return false;
- }
- /// <summary>
- /// 高频字检查法,UTF32编码方法
- /// </summary>
- /// <param name="_streamByte">流字节组</param>
- /// <returns></returns>
- private bool GaoPinZiJianCeUTF32(byte[] _streamByte)
- {
- foreach (byte[] bShuZu in _UTF32GaoPinZiFuBianMaLsit)
- {
- for (int i = ; i < _streamByte.Length; i++)
- {
- //判断首编码是否相等
- if (bShuZu[] == _streamByte[i])
- {
- //如果首字节相等,则检查后面二个字节是否也相等
- if ((i + < _streamByte.Length && _streamByte[i + ] == bShuZu[])
- && (i + < _streamByte.Length && _streamByte[i + ] == bShuZu[])
- && (i + < _streamByte.Length && _streamByte[i + ] == bShuZu[]))
- {
- return true;
- }
- }
- }
- }
- return false;
- }
- /// <summary>
- /// 高频字检查法,UTF7编码方法
- /// </summary>
- /// <param name="_streamByte">流字节组</param>
- /// <returns></returns>
- private bool GaoPinZiJianCeUTF7(byte[] _streamByte)
- {
- foreach (byte[] bShuZu in _UTF7GaoPinZiFuBianMaLsit)
- {
- for (int i = ; i < _streamByte.Length; i++)
- {
- //判断首编码是否相等
- if (bShuZu[] == _streamByte[i])
- {
- //如果首字节相等,则检查后面二个字节是否也相等
- if ((i + < _streamByte.Length && _streamByte[i + ] == bShuZu[])
- && (i + < _streamByte.Length && _streamByte[i + ] == bShuZu[])
- && (i + < _streamByte.Length && _streamByte[i + ] == bShuZu[])
- && (i + < _streamByte.Length && _streamByte[i + ] == bShuZu[]))
- {
- return true;
- }
- }
- }
- }
- return false;
- }
- /// <summary>
- /// 高频字检查法,GB18030编码方法
- /// </summary>
- /// <param name="_streamByte">流字节组</param>
- /// <returns></returns>
- private bool GaoPinZiJianCeGB18030(byte[] _streamByte)
- {
- foreach (byte[] bShuZu in _GB18030GaoPinZiFuBianMaLsit)
- {
- for (int i = ; i < _streamByte.Length; i++)
- {
- //判断首编码是否相等
- if (bShuZu[] == _streamByte[i])
- {
- //如果首字节相等,则检查后面二个字节是否也相等
- if ((i + < _streamByte.Length && _streamByte[i + ] == bShuZu[]))
- {
- return true;
- }
- }
- }
- }
- return false;
- }
- /// <summary>
- /// 高频字检查法,Unicode编码方法
- /// </summary>
- /// <param name="_streamByte">流字节组</param>
- /// <returns></returns>
- private bool GaoPinZiJianCeBigEndianUnicode(byte[] _streamByte)
- {
- foreach (byte[] bShuZu in _BigEndianUnicodeGaoPinZiFuBianMaLsit)
- {
- for (int i = ; i < _streamByte.Length; i++)
- {
- //判断首编码是否相等
- if (bShuZu[] == _streamByte[i])
- {
- //如果首字节相等,则检查后面二个字节是否也相等
- if ((i + < _streamByte.Length && _streamByte[i + ] == bShuZu[]))
- {
- return true;
- }
- }
- }
- }
- return false;
- }
- }
- }
- //使用示例
- //爬虫判断网页编码
- WebRequest _WebRequest = WebRequest.Create(@"https://www.cnblogs.com/j20171203/");
- WebResponse _WebResponse = _WebRequest.GetResponse();
- Stream _Stream = _WebResponse.GetResponseStream();
- MemoryStream _MemoryStream = new MemoryStream();
- const int bufferLength = ;
- byte[] buffer = new byte[bufferLength];
- int actual = ;
- while (true)
- {
- actual = _Stream.Read(buffer, , bufferLength);
- _MemoryStream.Write(buffer, , actual);
- if (actual == )
- {
- break;
- }
- }
- _MemoryStream.Position = ;
- StreamBianMaJianCe _StreamBianMaJianCe = new StreamBianMaJianCe(_MemoryStream);
- Encoding _jieGuoEncoding = _StreamBianMaJianCe.JianCe();
- _Stream.Close();
- _Stream.Dispose();
- _WebResponse.Close();
写作时间:2018-07-19
=====================================================================================
本文只代表本人的见解,可能存在错误,仅用于技术交流。如果你喜欢该文,可以扫下面的二维码打赏我(打赏敬请备注“博客园打赏”五字)。
C#判断文件编码——常用字法的更多相关文章
- 2018-8-10-C#-判断文件编码
title author date CreateTime categories C# 判断文件编码 lindexi 2018-08-10 19:16:52 +0800 2018-2-13 17:23: ...
- C# 判断文件编码
我们的项目中会包含有很多文件,但是可能我们没有注意到的,我们的文件的编码不一定是utf-8,所以可能在别人电脑运行时出现乱码.最近在做一个项目,这个项目可以把我们的文件夹里的所有文本,判断他们是什么编 ...
- C# 判断文件编码
无耐网上各种方法都有缺陷,此方法为原创,暂问发现问题.如发现请指正 public static Encoding GetFileEncodingByContent(string path) { var ...
- 判断文件的编码 python
import chardet import string path1= r'C:\Users\25456\Desktop' path = path1 + r'\深度学习.txt' with open( ...
- MultipartFile文件编码判断
MultipartFile文件编码判断 搜索:Java 判断文件的字符集编码 https://blog.csdn.net/top_code/article/details/8891796 但是在Mul ...
- 用UltraEdit判断打开文件的编码类型 用UltraEdit或notepad记事本查看文件编码格式 用UltraEdit查看当前文件编码
用UltraEdit查看当前文件编码 想判断文件的编码类型? 用强大的UltraEdit-32软件: UltraEdit-32的状态栏可以显示文件的编码类型,详细情况如下: ANSI/ANSCI--- ...
- 利用js判断文件是否为utf-8编码
常规方案 使用FileReader以utf-8格式读取文件,根据文件内容是否包含乱码字符�,来判断文件是否为utf-8. 如果存在�,即文件编码非utf-8,反之为utf-8. 代码如下: const ...
- C# 判断文件的真实格式
为了防止图片木马,通过后缀判断文件的格式是不准确的.可以通过这种方式进行判断. static void Main(string[] args) { string path = @"C:\Us ...
- [译]如何定义python源文件的文件编码
简介 这篇文章是为了介绍定义python源文件文件编码的方法.python解释器可以根据所指定的编码信息对当前文件进行解析.通常来说,这种方法可以提高解析器对Unicode编码的源文件的识别,并且支持 ...
随机推荐
- web进修之—Hibernate HQL(7)
概述 HQL是Hibernate封装成为面向对象的数据库查询语言,具有如下特点: 面向对象,包括继承.多态和关联之类的概念,SQL操作的数据库的表,HQL更像是操作对象 大小写敏感,只对对象和属性敏感 ...
- MFC控件编程进度条编写
MFC控件编程进度条编写 一丶进度条编程需要用到的方法 进度条MFC已经帮我们封装好类了. 叫做 CProgressCtrl 进度条编程也很简单. 封装的方法也就那个那几个. GetPos() 获 ...
- 彻底弄懂python编码
在编写python程序的过程中,中英文混用经常会出现编码问题.围绕此问题,本文首先介绍编码的含义及常用编码,随后列举几个python经常遇到的编码异常及解决方法,接着列举笔者在实践中遇到的异常出现的情 ...
- SpringBoot学习(二)-->Spring的Java配置方式
二.Spring的Java配置方式 Java配置是Spring4.x推荐的配置方式,可以完全替代xml配置. 1.@Configuration 和 @Bean Spring的Java配置方式是通过 @ ...
- Python字典小结
字典(dict)结构是Python中常用的数据结构,笔者结合自己的实际使用经验,对字典方面的相关知识做个小结,希望能对读者一些启发~ 创建字典 常见的字典创建方法就是先建立一个空字典,然后逐一 ...
- 写一个ORM框架的第一步(Apache Commons DbUtils)
新一次的内部提升开始了,如果您想写一个框架从Apache Commons DbUtils开始学习是一种不错的选择,我们先学习应用这个小“框架”再把源代码理解,然后写一个属于自己的ORM框架不是梦. 一 ...
- T-SQL基础(二)之关联查询
在上篇博文中介绍了T-SQL查询的基础知识,本篇主要介绍稍微复杂的查询形式. 表运算符 表运算符的作用是把为其提供的表作为输入,经过逻辑查询处理,返回一个表结果.SQL Server支持四个表运算符: ...
- git 创建本地分支与远程分支
早上抽空整理了下git常用操作,偶尔看看加深下印象吧: 如果github上已经有master分支 和dev分支 在本地 git checkout -b dev 新建并切换到本地dev分支 git pu ...
- sqoop将mysql数据导入hbase、hive的常见异常处理
原创不易,如需转载,请注明出处https://www.cnblogs.com/baixianlong/p/10700700.html,否则将追究法律责任!!! 一.需求: 1.将以下这张表(test_ ...
- 让MySQL查询更加高效——对查询进行重构
在优化有问题的查询时,目标应该是找到一个更优的方法获得实际需要的结果,而不是一定总是要求从MySQL获取一模一样的结果集 一个复杂查询还是多个简单查询 设计查询的时候一定需要考虑的问题就是,是否需要将 ...