.NET开发

本类阅读TOP10

·NHibernate快速指南(翻译)
·vs.net 2005中文版下载地址收藏
·【小技巧】一个判断session是否过期的小技巧
·VB/ASP 调用 SQL Server 的存储过程
·?dos下编译.net程序找不到csc.exe文件
·通过Web Services上传和下载文件
·学习笔记(补)《.NET框架程序设计(修订版)》--目录
·VB.NET实现DirectDraw9 (2) 动画
·VB.NET实现DirectDraw9 (1) 托管的DDraw
·建站框架规范书之——文件命名

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
自动辨别文本是不是utf-8的c#程序.

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

private void FindNoUTFFile(string Path)
   {
    System.IO.StreamReader reader = null;
    StringBuilder sb;
    StringBuilder sb2;    
    DirectoryInfo Folder = new System.IO.DirectoryInfo(Path);
    DirectoryInfo[] subFolders = Folder.GetDirectories();
    for (int i=0;i<subFolders.Length;i++)
    {
     FindNoUTFFile(subFolders[i].FullName);
    }
    FileInfo[] subFiles = Folder.GetFiles();
    for(int j=0;j<subFiles.Length ;j++)
    {
     if(CheckFileType(subFiles[j].Extension.ToLower()))
     {          
      FileStream fs = new FileStream(subFiles[j].FullName , FileMode.Open,FileAccess.Read);
      sb = new StringBuilder();
      sb2 = new StringBuilder();
      bool bUtf8 =IsUTF8(fs);
      fs.Close();
      if (!bUtf8)
      {       
       reader = new System.IO.StreamReader(subFiles[j].FullName,System.Text.Encoding.UTF8);
       sb2.Append(reader.ReadToEnd());
       reader.Close();
       reader = new System.IO.StreamReader(subFiles[j].FullName, System.Text.Encoding.Default,true);     
       sb.Append(reader.ReadToEnd());
       reader.Close(); 
   }
      
      
     }
    }
    
   }
  
   //0000 0000-0000 007F - 0xxxxxxx  (ascii converts to 1 octet!)
   //0000 0080-0000 07FF - 110xxxxx 10xxxxxx    ( 2 octet format)
   //0000 0800-0000 FFFF - 1110xxxx 10xxxxxx 10xxxxxx (3 octet format) 

   private static bool IsUTF8(FileStream sbInputStream)
   {
    int   i;
    byte cOctets;  // octets to go in this UTF-8 encoded character
    byte chr;
    bool  bAllAscii= true;
    long iLen = sbInputStream.Length;

    cOctets= 0;
    for( i=0; i < iLen; i++ )
    {
     chr = (byte)sbInputStream.ReadByte();

     if( (chr & 0x80) != 0 ) bAllAscii= false;

     if( cOctets == 0 ) 
     {
      if( chr >= 0x80 )
      { 
       do
       {
        chr <<= 1;
        cOctets++;
       }
       while( (chr & 0x80) != 0 );

       cOctets--;                       
       if( cOctets == 0 ) return false; 
      }
     }
     else
     {
      if( (chr & 0xC0) != 0x80 )
      {
       return false;
      }
      cOctets--;                      
     }
    }

    if( cOctets > 0 )
    { 
     return false;
    }

    if( bAllAscii )
    {   
     return false;
    }

    return true;

   }
  }
   
 
 }




相关文章

相关软件