java讀取文件字符集示例方法
更新時(shí)間:2014年02月24日 09:39:55 作者:
這篇文章主要介紹了java讀取文件字符集的示例,需要的朋友可以參考下
復(fù)制代碼 代碼如下:
public static String getCharset(File file) {
String charset = "GBK";
byte[] first3Bytes = new byte[3];
try {
boolean checked = false;
BufferedInputStream bis = new BufferedInputStream(
new FileInputStream(file));
bis.mark(0);
int read = bis.read(first3Bytes, 0, 3);
if (read == -1)
return charset;
if (first3Bytes[0] == (byte) 0xFF && first3Bytes[1] == (byte) 0xFE) {
charset = "UTF-16LE";
checked = true;
} else if (first3Bytes[0] == (byte) 0xFE && first3Bytes[1]
== (byte) 0xFF) {
charset = "UTF-16BE";
checked = true;
} else if (first3Bytes[0] == (byte) 0xEF && first3Bytes[1]
== (byte) 0xBB
&& first3Bytes[2] == (byte) 0xBF) {
charset = "UTF-8";
checked = true;
}
bis.reset();
if (!checked) {
int loc = 0;
while ((read = bis.read()) != -1) {
loc++;
if (read >= 0xF0)
break;
//單獨(dú)出現(xiàn)BF以下的,也算是GBK
if (0x80 <= read && read <= 0xBF)
break;
if (0xC0 <= read && read <= 0xDF) {
read = bis.read();
if (0x80 <= read && read <= 0xBF)// 雙字節(jié) (0xC0 - 0xDF)
// (0x80 -
// 0xBF),也可能在GB編碼內(nèi)
continue;
else
break;
// 也有可能出錯(cuò),但是幾率較小
} else if (0xE0 <= read && read <= 0xEF) {
read = bis.read();
if (0x80 <= read && read <= 0xBF) {
read = bis.read();
if (0x80 <= read && read <= 0xBF) {
charset = "UTF-8";
break;
} else
break;
} else
break;
}
}
System.out.println(loc + " " + Integer.toHexString(read));
}
bis.close();
} catch (Exception e) {
e.printStackTrace();
}
return charset;
}
相關(guān)文章
Java微服務(wù)實(shí)戰(zhàn)項(xiàng)目尚融寶接口創(chuàng)建詳解
這篇文章主要介紹了Java微服務(wù)實(shí)戰(zhàn)項(xiàng)目尚融寶的接口創(chuàng)建流程,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08
SSM框架實(shí)現(xiàn)分頁和搜索分頁的示例代碼
本篇文章主要介紹了SSM框架實(shí)現(xiàn)分頁和搜索分頁的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-03-03
Jmeter實(shí)現(xiàn)Base64編碼的兩種方式
這篇文章主要介紹了Jmeter實(shí)現(xiàn)Base64編碼,大家都知道Jmeter實(shí)現(xiàn)Base64編碼有兩種方式,本文通過圖文并茂的形式把每種方法給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-01-01
詳解Java線程編程中的volatile關(guān)鍵字的作用
這篇文章主要介紹了Java線程編程中的volatile關(guān)鍵字的作用,針對(duì)其禁止進(jìn)行指令重排序和讀寫內(nèi)存方面著重講解,需要的朋友可以參考下2015-12-12
Java數(shù)據(jù)結(jié)構(gòu)之常見排序算法(下)
這篇文章主要介紹了Java數(shù)據(jù)結(jié)構(gòu)之常見排序算法(下),與之相對(duì)有(上),想了解的朋友可以去本網(wǎng)站掃搜,在這兩篇文章里涵蓋關(guān)于八大排序算法的所有內(nèi)容,需要的朋友可以參考下2023-01-01
SpringSession會(huì)話管理之Redis與JDBC存儲(chǔ)實(shí)現(xiàn)方式
本文將詳細(xì)介紹Spring Session的核心概念、特性以及如何使用Redis和JDBC來實(shí)現(xiàn)會(huì)話存儲(chǔ),幫助開發(fā)者構(gòu)建更加健壯和可擴(kuò)展的應(yīng)用系統(tǒng),希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-04-04

