1. 程式人生 > >判斷二進位制流編碼

判斷二進位制流編碼

新增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;
	}