1. 程式人生 > >利用第三方的Jar包內的類和方法來判別檔案編碼

利用第三方的Jar包內的類和方法來判別檔案編碼

今天在論壇裡看見了一個人發帖子問,如何檢視檔案的編碼。有一個人回帖推薦了一片文章,我看了一下,覺得挺好的,我把原文的意思取捨了一下,整理成了下面的文章。原文請檢視:http://www.iteye.com/topic/108540作者是hdwangyi 。

他在帖子中貼出了一段程式碼來判斷一個文字是UTF-8編碼的,思路是讀取一個txt檔案,擷取字元流的前3個字元(即標示位),判斷是否與UTF-8的格式的標示位一致。

import java.io.*;

public class TestText {
    public static void main(String args[]){
        File file = new File("C:/1.txt");
        
        try{
            InputStream stream = new FileInputStream(file);
            byte[] byteArray = new byte[3];
            
            stream.read(byteArray);
            stream.close();
            
            if (byteArray[0] == -17 && byteArray[1] ==  -69 && byteArray[2] == -65)
                System.out.println("UTF-8");
            else
                System.out.println("可能是其他的編碼");
            
        }
        catch(Exception e){
            e.printStackTrace();
        }
    }
}
import cpdetector.io.*;
import java.io.*;
import java.nio.charset.*;

public class PageCode {
    public static void main(String args[]){
        
        CodepageDetectorProxy detector = CodepageDetectorProxy.getInstance();
        detector.add(JChardetFacade.getInstance());
        
        Charset charset = null;
        
        File f = new File("C:/1.txt");  
        
        try {   
            charset = detector.detectCodepage(f.toURL());   
        } 
        catch (Exception e) {
            e.printStackTrace();
        }   
        if(charset!=null){   
            System.out.println(f.getName()+"編碼是:"+charset.name());   
        }else  
            System.out.println(f.getName()+"未知");  
    }
}

輸出:

1.txt編碼是:GB2312 

 可以把main函式的相關內容改成一個方法重用,從而達到自由判斷檔案編碼的目的。