Java判斷檔案編碼
阿新 • • 發佈:2021-02-01
技術標籤: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; } }