注:本文屬于轉(zhuǎn)載
原文鏈接:https://blog.csdn.net/u013144287/article/details/74455817 遵循 CC 4.0 BY-SA 版權(quán)協(xié)議
ExchangeUtil.java代碼經(jīng)簡(jiǎn)單測(cè)試可以直接使用叹话,支持的編碼格式很多次绘,我試過(guò)GB2312赖条、GBK项贺、UTF-8褂策、BIG5等格式能正確獲取到
使用方式
public String getJavaEncode(File file) {
ExchangeUtil s = new ExchangeUtil();
return ExchangeUtil.javaname[s.detectEncoding(file)];
}
個(gè)人使用時(shí)對(duì)源代碼有個(gè)小修改,如下
private static final int FILE_BYTES_MAX = 1024 * 1024;
public int detectEncoding(File testfile) {
FileInputStream chinesefile;
byte[] rawtext;
//做個(gè)最大值限制折联,防止內(nèi)存溢出粥诫,但是不知道是否會(huì)影響準(zhǔn)確性
int length = (int)testfile.length();
if(length > FILE_BYTES_MAX) {
length = FILE_BYTES_MAX;
}
rawtext = new byte[length];
try {
chinesefile = new FileInputStream(testfile);
chinesefile.read(rawtext);
chinesefile.close();
} catch(Exception e) {
System.err.println("Error: " + e);
}
return detectEncoding(rawtext);
}
源代碼是讀取文件的全部字節(jié),這個(gè)考慮到文件特別大會(huì)有內(nèi)存問(wèn)題崭庸,所有做了一個(gè)最大讀取字節(jié)的限制怀浆。(不知道會(huì)不會(huì)影響獲取編碼的準(zhǔn)確度,我自己測(cè)試的沒(méi)有影響)
由于代碼過(guò)長(zhǎng)無(wú)法直接放代碼怕享,所以放到GitHub Android 獲取文件的編碼执赡,里面有ExchangeUtil.java源碼(未修改的)