使用中文写文章,当篇幅超过一定程度,必然会使用到诸如:“的”、“你”、“我”这样的常用字。本类思想便是提取中文最常用的一百个字,使用中文世界常用编码(主要有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. Cannot retrieve metalink for repository: epel/x86_64. Please verify its path and try again 解决方法

    vim /etc/yum.repos.d/epel.repo 1 [epel] 2 name=Extra Packages for Enterprise Linux 7 - $basearch 3 # ...

  2. SpringCloud入门之YAML格式文件规范学习

    1. 认识 YAML YAML(发音 /ˈjæməl/)是一个类似 XML.JSON 的数据序列化语言.其强调以数据为中心,旨在方便人类使用:并且适用于日常常见任务的现代编程语言.因而 YAML 本身 ...

  3. web开发的跨域问题详解

    本文由云+社区发表 做过 web 开发的同学,应该都遇到过跨域的问题,当我们从一个域名向另一个域名发送 Ajax 请求的时候,打开浏览器控制台就会看到跨域错误,今天我们就来聊聊跨域的问题. 1. 浏览 ...

  4. go使用rpc

    RPC是远程过程调用的缩写(Remote Procedure Call),通俗地说就是调用远处的一个函数,是分布式系统中不同节点间流行的通信方式.Go语言的标准库提供了一个简单的RPC实现 serve ...

  5. apache用户认证访问机制(转)

    Apache服务器已经内置用户验证机制,大家只要适当的加以设置,便可以控制网站的某些部分要用户验证.前期准备,必须已经安装apache,如果还没安装,或者对安装很模糊的话,第1步:我们在/var/ww ...

  6. 【ASP.NET MVC系列】浅谈jqGrid 在ASP.NET MVC中增删改查

    ASP.NET MVC系列文章 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作 ...

  7. CPU上下文切换

    CPU上下文切换包括进程上下文切换.线程上下文切换及中断上下文切换,当任务进行io或发生时间片事件及发生中断(如硬件读取完成)时,就会进入内核态,发生CPU上下文切换. 进程上下文切换,进程的上下文信 ...

  8. SpringBoot自动配置源码调试

    之前对SpringBoot的自动配置原理进行了较为详细的介绍(https://www.cnblogs.com/stm32stm32/p/10560933.html),接下来就对自动配置进行源码调试,探 ...

  9. TensorFlow中的通信机制——Rendezvous(一)本地传输

    背景 [作者:DeepLearningStack,阿里巴巴算法工程师,开源TensorFlow Contributor] 在TensorFlow源码中我们经常能看到一个奇怪的词——Rendezvous ...

  10. shell脚本示例:计算毫秒级、微秒级时间差

    bash&shell系列文章:http://www.cnblogs.com/f-ck-need-u/p/7048359.html 有时候需要计算命令的执行时间长度,可以使用time命令,虽然t ...