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编码的源文件的识别,并且支持 ...
随机推荐
- SpingBoot 属性加载
属性加载顺序 配置属性加载的顺序 开发者工具 `Devtools` 全局配置参数: 单元测试上的 `@TestPropertySource` 注解指定的参数: 单元测试上的 `@SpringBootT ...
- VC连接MySql
VC连接MySql 一丶MySql 需要了解的知识 VC连接MySql 需要了解几个关键的API: MYSQL * stdcall mysql init (MYSQL *mysql): 初始化一个数 ...
- 【杂谈】Remember-Me的实现
前言 此篇随笔记录了Remember-Me实现过程中出现的问题和解决方案,以及相关的思考. 正文 1. RememberMe是什么? RememberMe意为记住我,对应登录界面的那个勾选项.另一种说 ...
- MySQL模糊匹配查询like、regexp、in
MySQL提供标准的SQL模式匹配,以及一种基于像Unix实用程序,如:vi.grep和sed的扩展正则表达式模式匹配的格式 一.SQL模式(% ,_) SQL的模式匹配允许你使用“_”匹配任何单个字 ...
- ACM菜鸡退役帖——ACM究竟给了我什么?
这个ACM退役帖,诸多原因(一言难尽...),终于决定在我大三下学期开始的时候写出来.下面说两个重要的原因. 其一是觉得菜鸡的ACM之旅没人会看的,但是新学期开始了,总结一下,只为了更好的出发吧. 其 ...
- Spring之Bean的生命周期详解
通过前面多个接口的介绍了解了Bean对象生命周期相关的方法,本文就将这些接口的方法串起来,来了解Bean的完整的生命周期.而介绍Bean的生命周期也是面试过程中经常会碰到的一个问题,如果不注意就跳 ...
- Perl数组和hash相关函数
Perl数组和hash相关函数 内置的数组函数有: each, keys, pop, push, shift, splice, unshift, values 内置的hash函数有: delete, ...
- htmlUnit加持,网络小蜘蛛的超级进化
前言 前段时间写了个小说线上采集阅读(猛戳这里:https://www.cnblogs.com/huanzi-qch/p/9817831.html),当我们去采集起点网的小说目录时发现目录数据没有在h ...
- C# 委托 事件
一:什么叫委托 通过反射发现,委托其实是一个类,继承自System.MulticastDelegate,但是System.MulticastDelegate这个类是特殊类,不能被继承 二:委托的声明 ...
- lua的table元类
Lua中提供的元表是用于帮助Lua数据变量完成某些非预定义功能的个性化行为,如两个table的相加.假设a和b都是table,通过元表可以定义如何计算表达式a+b.当Lua试图将两个table相加时, ...