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

原创 2004年10月20日 18:22:00

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;

   }
  }
   
 
 }

判断是否utf8编码的算法

判断是否utf8编码的算法 分类: 字符编码2013-11-29 13:16 408人阅读 评论(0) 收藏 举报 参考:http://www.cnblogs.com/powert...
  • brandohero
  • brandohero
  • 2014年10月24日 10:38
  • 1148

C#怎么判断一个文件的编码格式是UTF-8 without BOM的啊

文本文件的开头头三个字节存放编码格式,这三个字节就叫做 BOM。 当头部开始的两个字节为 0xff 0xfe 0x41 时,是Unicode的小尾编码; 当头部的两个字节为        0xfe ...
  • ybhjx
  • ybhjx
  • 2016年08月14日 19:46
  • 1941

C#判断文本文件编码是ANSI还是无BOM的UTF8

Encoding GetBytesEncoding(byte[] bs) { int len = bs.Length; if (len >= 3 && bs[0] == 0xEF &&...
  • yanjianming2005
  • yanjianming2005
  • 2016年10月11日 23:19
  • 1193

iPhone网络编程初体验-简单的聊天程序

在这篇文章中,我将介绍如何使用TCP/IP协议让iPhone与服务器实现通信,同时以一个简单的聊天程序作为例子进行说明。   首先使用Xcode常见一个基于视图(View)的应用程序项目,取名N...
  • chang6520
  • chang6520
  • 2012年09月11日 16:09
  • 5174

自己收集整理的微软错误代码大全(中文和英文)

自己收集整理的微软错误代码大全,分别为中文和英文部分,供广大软件开发人员共勉。                      微软错误代码 2.1  中文 0 操作成功完成。 1 ...
  • magenfeng
  • magenfeng
  • 2013年01月24日 09:12
  • 14924

C#文本文件编码问题,区别UTF-8和GB2312

 最近用C#涉及到一些读取 txt文本文件的操作,但是一个编码问题就困惑了我好久。如果编码选的不对,会造成乱码。之前转载的一片文章提出了一种解决方法,就是用new StreamReader(file,...
  • forsiny
  • forsiny
  • 2009年11月15日 16:43
  • 7859

生成模型和判别模型的区别

生成模型与判别模型  一、决策函数Y=f(X)或者条件概率分布P(Y|X)        监督学习的任务就是从数据中学习一个模型(也叫分类器),应用这一模型,对给定的输入X预测相应的输出Y。这个模...
  • huangfeng1993
  • huangfeng1993
  • 2015年02月05日 10:07
  • 222

格式字符

一、格式字符 关于格式字符应用背景如下(之前在做《VC实战视频》的第一部的时候就有用到,以后也会经常用到的): [整数转化为字符串]用%d            如果是浮点数转化为字符串的话用%f c...
  • zcc1414
  • zcc1414
  • 2013年09月07日 23:25
  • 660

SDL 实现五子棋 GUI (一)

首先简短地说明一下, 原独立博客 www.codingtoro.com 到期后就停止了, 主要是发现自己还没有积累那么多可以拿出来分享, 自己的水平还很不够, 所以使用 CSDN 暂时作为博客. ...
  • codingtoro
  • codingtoro
  • 2012年08月28日 13:10
  • 1024

PHP判断当前是否utf-8

private function is_utf8($word)     {         if (preg_match("/^([".chr(228)."-".chr(233)."]{1}["....
  • stary1
  • stary1
  • 2016年01月22日 12:37
  • 387
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:自动辨别文本是不是utf-8的c#程序.
举报原因:
原因补充:

(最多只允许输入30个字)