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