判斷二進位制流編碼
阿新 • • 發佈:2018-12-05
新增jar包 chardet-1.0.jar cpdetector_1.0.10.jar jargs-1.0.jar
/** * 獲得檔案流的編碼格式 * detector是探測器,它把探測任務交給具體的探測實現類的例項完成。 * cpDetector內建了一些常用的探測實現類,這些探測實現類的例項可以通過add方法 加進來,如ParsingDetector、 * JChardetFacade、ASCIIDetector、UnicodeDetector。 * detector按照“誰最先返回非空的探測結果,就以該結果為準”的原則返回探測到的 * 字符集編碼。使用需要用到三個第三方JAR包:antlr.jar、chardet.jar和cpdetector.jar * cpDetector是基於統計學原理的,不保證完全正確。 * JChardetFacade封裝了由Mozilla組織提供的JChardet,它可以完成大多數檔案的編碼 * 測定。所以,一般有了這個探測器就可滿足大多數專案的要求,如果你還不放心,可以 * 再多加幾個探測器,比如下面的ASCIIDetector、UnicodeDetector等。 * @throws IOException * @throws IllegalArgumentException */ public static String getInputStreamEncode(InputStream is) throws IOException { String charsetName = null; try{ LOG.debug("預設編碼:"+Charset.defaultCharset()); CodepageDetectorProxy detector = CodepageDetectorProxy.getInstance(); detector.add(new ParsingDetector(false)); detector.add(JChardetFacade.getInstance()); detector.add(ASCIIDetector.getInstance()); detector.add(UnicodeDetector.getInstance()); Charset charset = null; int p = (is.read() << 8) + is.read(); try { charset = detector.detectCodepage(is,p); } catch (Exception ex) { ex.printStackTrace(); } if (charset != null) { charsetName= charset.name(); } else { charsetName = "utf-8"; } } catch(Exception e){ e.printStackTrace(); } return charsetName; }