java自動識別用戶上傳的文本文件編碼

jopen 9年前發布 | 5K 次閱讀 Java

經常碰到用戶上傳的部分數據文本文件亂碼問題,又不能限制用戶的上傳的文件編碼格式(這樣對客戶的要求可能比較高), 只好自己想辦法.  找了一部分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;  
        }  
    }  
來自:http://blog.csdn.net/ysola4/article/details/42442357

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!