Java如何獲取文件編碼格式
來源:程序員人生 發布時間:2017-03-24 08:58:03 閱讀次數:8952次
學習Java的同學注意了?。?!
學習進程中遇到甚么問題或想獲得學習資源的話,歡迎加入Java學習交換群,群號碼:183993990 我們1起學Java!
1:簡單判斷是UTF⑻或不是UTF⑻,由于1般除UTF⑻以外就是GBK,所以就設置默許為GBK。
依照給定的字符集存儲文件時,在文件的最開頭的3個字節中就有可能存儲著編碼信息,所以,基本的原理就是只要讀出文件前3個字節,判定這些字節的值,就能夠得知其編碼的格式。其實,如果項目運行的平臺就是中文操作系統,如果這些文本文件在項目內產生,即開發人員可以控制文本的編碼格式,只要判定兩種常見的編碼就能夠了:GBK和UTF⑻。由于中文Windows默許的編碼是GBK,所以1般只要判定UTF⑻編碼格式。
對UTF⑻編碼格式的文本文件,其前3個字節的值就是⑴7、⑹9、⑹5,所以,判定是不是是UTF⑻編碼格式的代碼片斷以下:
-
File file = new File(path);
-
InputStream in= new java.io.FileInputStream(file);
-
byte[] b = new byte[3];
-
in.read(b);
-
in.close();
-
if (b[0] == -17 && b[1] == -69 && b[2] == -65)
-
System.out.println(file.getName() + ":編碼為UTF⑻");
-
else
-
System.out.println(file.getName() + ":多是GBK,也多是其他編碼");
2:若想實現更復雜的文件編碼檢測,可使用1個開源項目cpdetector,它所在的網址是:http://cpdetector.sourceforge.net/。它的類庫很小,只有500K左右,cpDetector是基于統計學原理的,不保證完全正確,利用該類庫判定文本文件的代碼以下:
讀外部文件(先利用cpdetector檢測文件的編碼格式,然后用檢測到的編碼方式去讀文件):
-
-
-
-
-
-
-
-
-
public static String getFileEncode(String path) {
-
-
-
-
-
-
-
-
-
CodepageDetectorProxy detector = CodepageDetectorProxy.getInstance();
-
-
-
-
-
detector.add(new ParsingDetector(false));
-
-
-
-
-
-
detector.add(JChardetFacade.getInstance());
-
-
detector.add(ASCIIDetector.getInstance());
-
-
detector.add(UnicodeDetector.getInstance());
-
java.nio.charset.Charset charset = null;
-
File f = new File(path);
-
try {
-
charset = detector.detectCodepage(f.toURI().toURL());
-
} catch (Exception ex) {
-
ex.printStackTrace();
-
}
-
if (charset != null)
-
return charset.name();
-
else
-
return null;
-
}
-
String charsetName = getFileEncode(configFilePath);
-
System.out.println(charsetName);
-
inputStream = new FileInputStream(configFile);
-
BufferedReader in = new BufferedReader(new InputStreamReader(inputStream, charsetName));
讀jar包內部資源文件(先利用cpdetector檢測jar內部的資源文件的編碼格式,然后以檢測到的編碼方式去讀文件):
-
-
-
-
-
-
-
-
-
public static String getFileEncode(URL url) {
-
-
-
-
-
-
-
-
-
CodepageDetectorProxy detector = CodepageDetectorProxy.getInstance();
-
-
-
-
-
detector.add(new ParsingDetector(false));
-
-
-
-
-
-
detector.add(JChardetFacade.getInstance());
-
-
detector.add(ASCIIDetector.getInstance());
-
-
detector.add(UnicodeDetector.getInstance());
-
java.nio.charset.Charset charset = null;
-
try {
-
charset = detector.detectCodepage(url);
-
} catch
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈