1. 程式人生 > 其它 >Java判斷檔案編碼

Java判斷檔案編碼

技術標籤:Java基礎

首先,我們需要三個jar包

主要jar包:cpdetector.jar
同時還需jchardet-1.0.jar這個包,否則detector.add(cpdetector.io.JChardetFacade.getInstance()); 會報錯;
還有一個antlr.jar,不然執行過程中detector.add(new ParsingDetector(false));會報錯;

如圖所示

public class Utils {
	private static final String UNKONW_CHARSET = "unknow charset";

	@SuppressWarnings("deprecation")
	public static String getFileCharSet(File file) {
		/**
		 * CodepageDetectorProxy是探測器,它把探測任務交給具體的探測例項完成。
		 * CodepageDetectorProxy內建了一些常用的探測實現類。
		 * 這些探測實現類的例項可以通過add方法 加進來
		 * 如ParsingDetector、JChardetFacade、ASCIIDetector、UnicodeDetector。
		 * CodepageDetectorProxy按照“誰最先返回非空的探測結果,就以該結果為準”的原則返回探測到的 字符集編碼。
		 */
		CodepageDetectorProxy detectorProxy = CodepageDetectorProxy.getInstance();
		/**
		 * ParsingDetector
		 * 	可用於檢查HTML、XML等檔案或字元流的編碼
		 * 	構造方法中的引數用於指示是否顯示探測過程的詳細資訊
		 * 	為false不顯示。
		 */
		//如果要探測xml,html檔案本身的編碼,而不是探測xml的encoding,請註釋掉(html同理)
		detectorProxy.add(new ParsingDetector(false));
		/**
		 *   JChardetFacade
		 *   	封裝了由Mozilla組織提供的JChardet,它可以完成大多數檔案的編碼測定。
		 *   	所以,一般有了這個探測器就可滿足大多數專案的要求。
		 *   	如果你還不放心,可以再多加幾個探測器
		 *   	比如下面的ASCIIDetector、UnicodeDetector等。  
		 */
		detectorProxy.add(JChardetFacade.getInstance());
		//UnicodeDetector用於Unicode家族編碼的測定
		detectorProxy.add(UnicodeDetector.getInstance());
		//ASCIIDetector用於ASCII編碼測定
		detectorProxy.add(ASCIIDetector.getInstance());
		Charset charset = null;
		try {
			//注意,當檔名稱中有特殊符號,例如%的時候,本句程式碼拋異常
			charset = detectorProxy.detectCodepage(file.toURL());
			return charset.name();
		} catch (Exception e) {
			e.printStackTrace();
			System.out.println(file.getAbsolutePath() + " unknow charset");
		}
		return UNKONW_CHARSET;
	}

}