熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

.NET自動字符編碼識別程序庫 NChardet

2013-11-13 09:51:56  來源: .NET編程 

  什麼是NChardet
   NChardet是mozilla自動字符編碼識別程序庫chardet的NET實現它移植自jchardetchardet的java版實現可實現對給定字符流的編碼探測
  
   NChardet是如何工作的
  
   NChardet通過逐個比較輸入字符來猜測編碼由於是猜測所以可能會有不能完全識別的情況如果輸入字符不能確定正確的編碼那麼NChardet會給出一組可能的編碼值
  
   如何使用NChardet
  
   要使用NChardet來探測編碼需要進行如下步驟
  
   使用制定的語言線索來構造Detector類的實例對象
   用實現了ICharsetDetectionObserver接口的對象作為參數來調用Detector類的Init方法
   傳入要探測的字符流進行編碼探測
   調用Detector類的DataEnd方法
   得到結果或可能的結果集
  
   語言線索是一個整數可用的語言線索有如下幾個
  
   Japanese
   Chinese
   Simplified Chinese
   Traditional Chinese
   Korean
   Dont know (默認)
  
  
   ICharsetDetectionObserver接口只有一個Notify方法當NChardet引擎認為自己已經探測出正確的編碼時它就會調用這個Notify方法用戶程序可以從這個Nodify方法中得到通知(重寫ICharsetDetectionObserver接口的Notify實現)
  
  代碼實例
  
  
   //實現ICharsetDetectionObserver接口
   public class MyCharsetDetectionObserver :
   NChardetICharsetDetectionObserver
   {
   public string Charset = null;
  
   public void Notify(string charset)
   {
   Charset = charset;
   }
   } 
   
   

  int lang = ;//
   //用指定的語參數實例化Detector
   Detector det = new Detector(lang) ;
   //初始化
   MyCharsetDetectionObserver cdo = new MyCharsetDetectionObserver();
   detInit(cdo);
  
   //輸入字符流
   Uri url = new Uri();
   HttpWebRequest request =
   HttpWebRequest)WebRequestCreate(url);
   HttpWebResponse response =
   (HttpWebResponse)requestGetResponse();
   Stream stream = responseGetResponseStream();
  
   byte[] buf = new byte[] ;
   int len;
   bool done = false ;
   bool isAscii = true ;
  
   while( (len=streamRead(bufbufLength)) != ) {
   // 探測是否為Ascii編碼
   if (isAscii)
   isAscii = detisAscii(buflen);
  
   // 如果不是Ascii編碼並且編碼未確定則繼續探測
   if (!isAscii && !done)
   done = detDoIt(buflen false);
  
   }
   streamClose();
   streamDispose();
   //調用DatEnd方法
   //如果引擎認為已經探測出了正確的編碼
  //則會在此時調用ICharsetDetectionObserver的Notify方法
   detDataEnd();
  
   if (isAscii) {
   ConsoleWriteLine(CHARSET = ASCII);
   found = true ;
   }
   else if (cdoCharset != null)
   {
   ConsoleWriteLine(CHARSET = {}cdoCharset);
   found = true;
   }
  
   if (!found) {
   string[] prob = detgetProbableCharsets() ;
   for(int i=; i<probLength; i++) {
   ConsoleWriteLine(Probable Charset = + prob[i]);
   }
   }
   ConsoleReadLine();
  


From:http://tw.wingwit.com/Article/program/net/201311/11790.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.