[轉]在C#中判斷一個文本文件的編碼方式


文件的字符集在Windows下有兩種,一種是ANSI,一種Unicode。

對於Unicode,Windows支持了它的三種編碼方式,一種是小尾編碼(Unicode),一種是大尾編碼(BigEndianUnicode),一種是UTF-8編碼。

我們可以從文件的頭部來區分一個文件是屬於哪種編碼。當頭部開始的兩個字節為 FF FE時,是Unicode的小尾編碼;當頭部的兩個字節為FE FF時,是Unicode的大尾編碼;當頭部兩個字節為EF BB時,是Unicode的UTF-8編碼;當它不為這些時,則是ANSI編碼。

按照如上所說,我們可以通過讀取文件頭的兩個字節來判斷文件的編碼格式,代碼如下(C#代碼):

程序中System.Text.Encoding.Default是指操作系統的當前 ANSI 代碼頁的編碼。

 

   1:  public System.Text.Encoding  GetFileEncodeType(string filename) 
   2:  { 
   3:      System.IO.FileStream fs = new System.IO.FileStream(filename, System.IO.FileMode.Open, System.IO.FileAccess.Read); 
   4:      System.IO.BinaryReader br = new System.IO.BinaryReader(fs); 
   5:      Byte[] buffer = br.ReadBytes(2); 
   6:      if(buffer[0]>=0xEF) 
   7:      { 
   8:          if(buffer[0]==0xEF && buffer[1]==0xBB) 
   9:          { 
  10:               return System.Text.Encoding.UTF8; 
  11:          } 
  12:          else if(buffer[0]==0xFE && buffer[1]==0xFF) 
  13:          { 
  14:               return System.Text.Encoding.BigEndianUnicode; 
  15:          } 
  16:          else if(buffer[0]==0xFF && buffer[1]==0xFE) 
  17:          { 
  18:               return System.Text.Encoding.Unicode; 
  19:          } 
  20:          else
  21:          { 
  22:               return System.Text.Encoding.Default; 
  23:          } 
  24:      } 
  25:      else
  26:      { 
  27:               return System.Text.Encoding.Default; 
  28:      } 
  29:  }

 

原文地址:

http://www.cnblogs.com/swtseaman/archive/2011/05/17/2048689.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM