zoukankan      html  css  js  c++  java
  • java自动识别用户上传的文本文件编码

    原文:http://www.open-open.com/code/view/1420514359234

    经常碰到用户上传的部分数据文本文件乱码问题,又不能限制用户的上传的文件编码格式(这样对客户的要求可能比较高), 只好自己想办法.  找了一部分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;  
            }  
        }  
  • 相关阅读:
    10种 分布式ID生成方式(新增MongoDB的ObjectId)
    Spring核心接口Ordered的实现及应用 (动态切换数据源时候用到)
    No module named 'Crypto' 解决方案
    使用Anaconda管理多个版本的Python环境
    深入浅出Blazor webassembly 之API服务端保护
    [转载]HTTPS 是如何保护你的安全的
    [转载]api接口token的生成和应用
    深入浅出Blazor webassembly之HttpClient使用
    深入浅出Blazor webassembly之自定义Input组件
    深入浅出Blazor webassembly之EditForm
  • 原文地址:https://www.cnblogs.com/shihaiming/p/7048209.html
Copyright © 2011-2022 走看看