自动辨别文本是不是utf-8的c#程序

程序

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;

   }
  }
  
 
 }

 

时间: 2024-11-18 14:48:26

自动辨别文本是不是utf-8的c#程序的相关文章

javascript自动给文本url地址增加链接的方法分享

 这篇文章主要介绍了javascript自动给文本url地址增加链接的方法,有需要的朋友可以参考一下 URL地址自动添加的实现其实就是那么点内容:检测与替换.   检测   "检测"就是检测文字(字符串)内部是否有符合http地址的内容,显然,这需要用到正则表达式进行验证,这个工作前端和后台都可以做,这里,只讲前端的方法,使用JavaScript实现.   验证HTTP地址的正则表达式如下(可能有疏漏或是不准确之处,欢迎指正):   代码如下: var reg = /(http://|

Android零基础入门第47节:自动完成文本框AutoCompleteTextView

原文:Android零基础入门第47节:自动完成文本框AutoCompleteTextView    上一期学习的Spinner的使用,掌握的怎么样?本期一起来学习AutoCompleteTextView的使用.     一.认识AutoCompleteTextView       AutoCompleteTextView是自动完成文本框,从EditText派生而出,实际上它也是一个文本编辑框,但它比普通编辑框多了一个功能:当用户输入一定字符之后,自动完成文本框会显示一个下拉菜单,供用户从中选择

mfc-MFC一个关于自动滚动文本框的问题

问题描述 MFC一个关于自动滚动文本框的问题 在VCMFC中,向文本框追加文本文字,如何自动滚动文本框保持显示最后一行呢? 解决方案 m_edit.LineScroll(m_edit.GetLineCount()); 解决方案二: LineScroll + GetLineCount 就可以搞 解决方案三: 直接用Rich Eidt控件,不要用普通的edit控件,普通的也行,就是在属性里要设置一下自动换行

【Android开发】高级组件-自动完成文本框

自动完成文本框(AutoCompleteTextView),用于实现允许用户输入一定字符后,显示一个下拉菜单,供用户从中选择,当用户选择某个选项之后,按用户选择自动填写该文本框. 语法格式: <AutoCompleteTextView 属性列表> </AutoCompleteTextView> AutoCompleteTextView组件继承EditText,所以它支持EditText组件提供的属性,同时,该组件还有以下属性: android:completionHint 下拉列表

燕乐存大神点评 | 卫报记者使用Torch-RNN自动生成文本——普通人也能玩深度学习

人工智能领域大神燕乐存点评卫报记者使用Torch-RNN自动生成文本 如果深度学习变得和网络一样大,那就是时候进一步关注它了. Google DeepMind人工智能项目,AlphaGo,使用机器学习击败了它的人类对手,但这仅仅是个开端.图片:Ahn Young-joon/AP 世界在被机器学习重塑 世界正在慢慢的被机器学习重塑.我们不需要再教电脑如何去执行复杂的任务,如图像识别和文章翻译:相反,我们建立了一个让它们学会自主学习的系统. "这不是魔术"Google一位资深的调研科学家G

Android AutoCompleteTextView自动提示文本框实例代码_Android

 自动提示文本框(AutoCompleteTextView)可以加强用户体验,缩短用户的输入时间(百度的搜索框就是这个效果). 先给大家展示下效果图,如果大家感觉还不错,请参考实现代码:   最后一张获取文本框里面的值(其实就跟TextView.EditText一样): 首先,在xml中定义AutoCompleteTextView控件: activity_main.xml: <LinearLayout xmlns:android="http://schemas.android.com/ap

Android自动编辑文本框(AutoCompleteTextView)使用方法详解

自动编辑文本框(AutoCompleteTextView)继承自EditText,能够接受用户的输入编辑,但是有这自己的特色功能:输入一定的字符以后会弹出下拉列表提示供用户选择,用户选择之后会自动填充文本框.这项功能正如浏览器的输入提示: 由于自动编辑文本框继承于EditText,它能够支持EditText的全部属性,但是在输入提示方面它有着自己的独特属性: android:completionHint     为弹出下拉菜单指定提示标题 android:completionThreshold 

Android AutoCompleteTextView自动提示文本框实例代码

自动提示文本框(AutoCompleteTextView)可以加强用户体验,缩短用户的输入时间(百度的搜索框就是这个效果). 先给大家展示下效果图,如果大家感觉还不错,请参考实现代码: 最后一张获取文本框里面的值(其实就跟TextView.EditText一样): 首先,在xml中定义AutoCompleteTextView控件: activity_main.xml: <LinearLayout xmlns:android="http://schemas.android.com/apk/r

自动完成文本框AutoCompleteTextView

自动完成文本框AutoCompleteTextView:用户输入一定字符后,会显示一个下拉菜单供用户选择 android:completionHint="请输入"设置出现在下拉菜单中的提示标题 android:dropDownHorizontalOffset="20dp"设置下拉菜单与文本框间的水平偏移,下拉菜单默认与文本框左对齐 android:completionThreshold="1"设置用户至少输入几个字符才会显示提示 android: