/// <summary>已重载,返回字节数组对象最接近的编码之一</summary> /// <param name="sr">一个字节数组对象</param> /// <returns>返回字节数组对象最接近的编码之一</returns> public virtual string GetByCode(byte[] sr) { SetErr(null); try { EnArr.Clear(); _EnStr = ""; _EnAbsStr = ""; _IsEnArr = 0; Detector det = new Detector(Lang); CDOClass cdo = new CDOClass(); det.Init(cdo); byte[] buf = new byte[1024]; bool done = false; int lent = 0; int leni = 0; while (lent < sr.Length) { leni = sr.Length - lent; if (leni > 1024) { Array.Copy(sr, lent, buf, 0, 1024); leni = 1024; } else { Array.Copy(sr, lent, buf, 0, leni); } lent += 1024; if (_IsAscii) { _IsAscii = det.isAscii(buf, leni); if (IsAscii) { break; } } if (_IsAscii == false && done == false) { done = det.DoIt(buf, leni, false); if (done) { break; } } } det.DataEnd(); if (_IsAscii) { _EnAbsStr = "ASCII"; _EnStr = EnAbsStr; _IsEnArr = 1; } else if (cdo.Charset != null) { _EnAbsStr = cdo.Charset.ToString(); _EnStr = EnAbsStr; _IsEnArr = 1; } if (_IsEnArr == 0) { EnArr = new List <string>(det.getProbableCharsets()); if (EnArr.Count > 0) { _EnStr = EnArr[0].ToString(); if (EnArr.Count > 1) { _IsEnArr = 2; } else { _IsEnArr = 1; } } } return(_EnStr); } catch (Exception ex) { SetErr(ex); return(""); } }
/// <summary>已重载,返回FileStream对象最接近的编码之一</summary> /// <param name="sr">一个FileStream对象</param> /// <returns>返回FileStream对象最接近的编码之一</returns> public virtual string GetByCode(FileStream sr) { SetErr(null); try { EnArr.Clear(); _EnStr = ""; _EnAbsStr = ""; _IsEnArr = 0; Detector det = new Detector(Lang); CDOClass cdo = new CDOClass(); det.Init(cdo); byte[] buf = new byte[1024]; bool done = false; int lent; while ((lent = sr.Read(buf, 0, buf.Length)) != 0) { if (_IsAscii) { IsAscii = det.isAscii(buf, lent); if (IsAscii) { break; } } if (_IsAscii == false && done == false) { done = det.DoIt(buf, lent, false); if (done) { break; } } } sr.Close(); det.DataEnd(); if (_IsAscii) { _EnAbsStr = "ASCII"; _EnStr = EnAbsStr; _IsEnArr = 1; } else if (cdo.Charset != null) { _EnAbsStr = cdo.Charset.ToString(); _EnStr = EnAbsStr; _IsEnArr = 1; } if (_IsEnArr == 0) { EnArr = new List <string>(det.getProbableCharsets()); if (EnArr.Count > 0) { _EnStr = EnArr[0].ToString(); if (EnArr.Count > 1) { _IsEnArr = 2; } else { _IsEnArr = 1; } } } return(_EnStr); } catch (Exception ex) { SetErr(ex); return(""); } }