使用中文写文章,当篇幅超过一定程度,必然会使用到诸如:“的”、“你”、“我”这样的常用字。本类思想便是提取中文最常用的一百个字,使用中文世界常用编码(主要有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#判断文件编码——常用字法的更多相关文章

  1. 2018-8-10-C#-判断文件编码

    title author date CreateTime categories C# 判断文件编码 lindexi 2018-08-10 19:16:52 +0800 2018-2-13 17:23: ...

  2. C# 判断文件编码

    我们的项目中会包含有很多文件,但是可能我们没有注意到的,我们的文件的编码不一定是utf-8,所以可能在别人电脑运行时出现乱码.最近在做一个项目,这个项目可以把我们的文件夹里的所有文本,判断他们是什么编 ...

  3. C# 判断文件编码

    无耐网上各种方法都有缺陷,此方法为原创,暂问发现问题.如发现请指正 public static Encoding GetFileEncodingByContent(string path) { var ...

  4. 判断文件的编码 python

    import chardet import string path1= r'C:\Users\25456\Desktop' path = path1 + r'\深度学习.txt' with open( ...

  5. MultipartFile文件编码判断

    MultipartFile文件编码判断 搜索:Java 判断文件的字符集编码 https://blog.csdn.net/top_code/article/details/8891796 但是在Mul ...

  6. 用UltraEdit判断打开文件的编码类型 用UltraEdit或notepad记事本查看文件编码格式 用UltraEdit查看当前文件编码

    用UltraEdit查看当前文件编码 想判断文件的编码类型? 用强大的UltraEdit-32软件: UltraEdit-32的状态栏可以显示文件的编码类型,详细情况如下: ANSI/ANSCI--- ...

  7. 利用js判断文件是否为utf-8编码

    常规方案 使用FileReader以utf-8格式读取文件,根据文件内容是否包含乱码字符�,来判断文件是否为utf-8. 如果存在�,即文件编码非utf-8,反之为utf-8. 代码如下: const ...

  8. C# 判断文件的真实格式

    为了防止图片木马,通过后缀判断文件的格式是不准确的.可以通过这种方式进行判断. static void Main(string[] args) { string path = @"C:\Us ...

  9. [译]如何定义python源文件的文件编码

    简介 这篇文章是为了介绍定义python源文件文件编码的方法.python解释器可以根据所指定的编码信息对当前文件进行解析.通常来说,这种方法可以提高解析器对Unicode编码的源文件的识别,并且支持 ...

随机推荐

  1. NET Core微服务之路:弹性和瞬态故障处理库Polly的介绍

    前言 上一节中我们介绍了Ocelot的常见使用配置,通过json配置文件,实现API网关的请求处理.和一个使用DownStream扩展下游中间件,来实现Http转RPC的简单实现,功能不算强大,但可以 ...

  2. retry重试常见场景及实现

    当我们的代码是有访问网络相关的操作时,比如http请求或者访问远程数据库,经常可能会发生一些错误,有些错误可能重新去发送请求就会成功,本文分析常见可能需要重试的场景,并最后给出python代码实现. ...

  3. 第3章 NFS基本应用

    1.1 概述 类似ext家族.xfs格式的本地文件系统,它们都是通过单个文件名称空间(name space)来包含很多文件,并提供基本的文件管理和空间分配功能.而文件是存放在文件系统中(上述名称空间内 ...

  4. 分布式系统监视zabbix讲解十一之zabbix升级--技术流ken

    思考 现在有这样一个需求,业务场景想要使用的监控模版没有3.0版本的,只有2.0,我们都知道2.0的模版无法导入进3.0版本的zabbix中,这个时候应该怎么获得3.0的监控模版哪?本篇博客将详细演示 ...

  5. Linux上安装nginx+tomcat负载均衡

    1.Ngnix Nginx (发音同 engine x)是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行.  其特点是占有内 ...

  6. c# 溢出上下文检测

    对于类型转换是否溢出可以用 checked和unchecked运算符 在unchecked上下文中会忽略溢出 在checked 会抛出异常 ; byte sb; sb = unchecked((byt ...

  7. wpf学习20180606

    对象元素的子元素 有三类子元素:内容属性.集合项.值(类型转换) ------------------------------------------------------------------- ...

  8. vs2010打不开vs2017的.sln文件,出现错误提示 “选择的文件是解决方案文件 但是用此应用程序的较新版本创建的,无法打开”

    解决方案: 1.复制下面这段语句 Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 2. ...

  9. [PHP]算法-旋转数组的最小值的PHP实现

    把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组 ...

  10. Android破解学习之路(十六)—— dll破解的IL指令

    IL指令介绍 IL是.NET框架中中间语言(Intermediate Language)的缩写. 使用.NET框架提供的编译器可以直接将源程序编译为.exe或.dll文件,但此时编译出来的程序代码并不 ...