1. 程式人生 > >c#獲取檔案編碼型別

c#獲取檔案編碼型別

public class EncodingType   
//編碼問題目前為止,基本上沒人解決,就連windows的IE的自動識別有時還識別錯編碼呢。--yongfa365   
//如果檔案有BOM則判斷,如果沒有就用系統預設編碼,缺點:沒有BOM的非系統編碼檔案會顯示亂碼。   
//呼叫方法: EncodingType.GetType(filename)   
//來源:http://blog.csdn.net/listlofusage/archive/2007/02/10/1506900.aspx   
{   
    public static System.Text.Encoding GetType(string FILE_NAME)   
    {   
        FileStream fs = new FileStream(FILE_NAME, FileMode.Open, FileAccess.Read);   
        System.Text.Encoding r = GetType(fs);   
        fs.Close();   
        return r;   
    }   
    public static System.Text.Encoding GetType(FileStream fs)   
    {   
        /*byte[] Unicode=new byte[]{0xFF,0xFE};  
        byte[] UnicodeBIG=new byte[]{0xFE,0xFF};  
        byte[] UTF8=new byte[]{0xEF,0xBB,0xBF};*/  
  
        BinaryReader r = new BinaryReader(fs, System.Text.Encoding.Default);   
        byte[] ss = r.ReadBytes(3);   
        r.Close();   
        //編碼型別 Coding=編碼型別.ASCII;   
        if (ss[0] >= 0xEF)   
        {   
            if (ss[0] == 0xEF && ss[1] == 0xBB && ss[2] == 0xBF)   
            {   
                return System.Text.Encoding.UTF8;   
            }   
            else if (ss[0] == 0xFE && ss[1] == 0xFF)   
            {   
                return System.Text.Encoding.BigEndianUnicode;   
            }   
            else if (ss[0] == 0xFF && ss[1] == 0xFE)   
            {   
                return System.Text.Encoding.Unicode;   
            }   
            else  
            {   
                return System.Text.Encoding.Default;   
            }   
        }   
        else  
        {   
            return System.Text.Encoding.Default;   
        }   
    }   
}