• 热门专题

java自动识别用户上传的文本文件编码

作者:  发布日期:2015-01-06 20:10:22
Tag标签:自动识别  编码  文本  
  • 经常碰到用户上传的部分数据文本文件乱码问题,又不能限制用户的上传的文件编码格式(这样对客户的要求可能比较高), 只好自己想办法. 找了一部分java获取文件编码的.

    要么就是识别错误. 要么就是只有一小段的代码,也不说具体引用了什么...我就在这里分享一下吧. 工具类就一个方法. main测试方法我就不写了.

    貌似还不能上传附件...就弄到我的资源里去吧.

    引用了.这两个jar类.

    chardet.jar

    cpdetector_1.0.10.jar

     

    package com.dxx.buscredit.common.util;
    
    import info.monitorenter.cpdetector.io.ASCIIDetector;
    import info.monitorenter.cpdetector.io.CodepageDetectorProxy;
    import info.monitorenter.cpdetector.io.JChardetFacade;
    import info.monitorenter.cpdetector.io.ParsingDetector;
    import info.monitorenter.cpdetector.io.UnicodeDetector;
    
    import java.io.File;
    import java.nio.charset.Charset;
    
    public class FileCharsetDetector {
    
    	/**
    	 * 利用第三方开源包cpdetector获取文件编码格式.
    	 * @param filePath
    	 * @return
    	 */
    	public static String getFileEncode(File file) {
    		/**
    		 * <pre>
    		 * 1、cpDetector内置了一些常用的探测实现类,这些探测实现类的实例可以通过add方法加进来,
    		 * 如:ParsingDetector、 JChardetFacade、ASCIIDetector、UnicodeDetector. 
    		 * 2、detector按照“谁最先返回非空的探测结果,就以该结果为准”的原则. 
    		 * 3、cpDetector是基于统计学原理的,不保证完全正确.
    		 * </pre>
    		 */
    		CodepageDetectorProxy detector = CodepageDetectorProxy.getInstance();
    		
    		detector.add(new ParsingDetector(false));
    		detector.add(UnicodeDetector.getInstance());
    		detector.add(JChardetFacade.getInstance());//内部引用了 chardet.jar的类
    		detector.add(ASCIIDetector.getInstance());
    		
    		Charset charset = null;
    		try {
    			charset = detector.detectCodepage(file.toURI().toURL());
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    		
    		//默认为GBK
    		String charsetName = "GBK";
    		if (charset != null) {
    			if (charset.name().equals("US-ASCII")) {
    				charsetName = "ISO_8859_1";
    			} else{
    				charsetName = charset.name();
    			}
    		}
    		return charsetName;
    	}
    }

     

About IT165 - 广告服务 - 隐私声明 - 版权申明 - 免责条款 - 网站地图 - 网友投稿 - 联系方式
本站内容来自于互联网,仅供用于网络技术学习,学习中请遵循相关法律法规