判断二进制流编码

博客介绍了如何使用特定的jar包,如chardet-1.0.jar, cpdetector_1.0.10.jar, jargs-1.0.jar来判断二进制流的编码类型。" 59110166,5695518,平衡括号序列:USACO笨牛Clumsy Cows问题解析,"['算法', '编程竞赛', '字符串处理', '数据结构']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

添加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;
	} 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值