Ejemplo n.º 1
0
 /// <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("");
     }
 }
Ejemplo n.º 2
0
 /// <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("");
     }
 }