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编码的源文件的识别,并且支持 ...
随机推荐
- js 日期格式 转换 yyyy-MM-dd
之前js获取到数据库的Date,总是显示成: 后来知道是js 的Date 格式不能直接转换常用的yyyy-MM-dd 的格式 Date.prototype.yyyymmdd = function () ...
- [机器学习]回归--Decision Tree Regression
CART决策树又称分类回归树,当数据集的因变量为连续性数值时,该树算法就是一个回归树,可以用叶节点观察的均值作为预测值:当数据集的因变量为离散型数值时,该树算法就是一个分类树,可以很好的解决分类问题. ...
- jpa的查询语法
- Flask入门第二天
一.请求钩子 在客户端和服务器交互的过程中,有些准备工作或稍微工作是需要处理的,比如:在请求开始时,建立数据库连接:在请求开始时,根据需求进行权限校验:在请求结束时,指定数据的交互格式等.为了让每个视 ...
- centos7+cobbler+kickstart
一.cobbler简介 cobbler 是一个系统启动服务boot server,可以通过pxe得方式用来快速安装,重装系统,支持安装不同linux发行版和windows.这个工具是用python开发 ...
- WebApi HTTP Put 405 Method not allowed
总结列表: 1. There is already an open DataReader associated with this Connection which must be closed fi ...
- IIS域名转发
在IIS中设置Http重定向 界面操作如下: 最终通过上面的操作生成了一个配置文件如下: 我这面就是一个空的目录,里面仅包含这个配置文件,就可以实现转发啦
- UML 序列图
序列图 序列图主要用于按照交互发生的一系列顺序,显示对象之间的这些交互.显示不同的业务对象如何交互,对于交流当前业务如何进行很有用.序列图是一个用来记录系统需求,和整理系统设计的好图.序列图 ...
- [angularjs] angularjs系列笔记(七)HTML DOM
AngularJs为HTML DOM元素的属性提供了绑定数据的指令 ng-disabled指令 ng-disabled指令直接绑定数据到HTML元素的disabled属性 ng-show指令 ng-s ...
- python之把字符串形式的函数编译执行
实现效果:执行字符串形式的函数 代码如下 # name = 'aaa' # data = [18,32,33] # def hellocute(): # return "name %s ,a ...