導航:首頁 > 編程語言 > java判斷字元集

java判斷字元集

發布時間:2022-10-06 08:30:32

㈠ 收藏java 如何判斷txt的編碼字元集

簡單判斷是UTF-8或不是UTF-8,因為一般除了UTF-8之外就是GBK,所以就設置默認為GBK。

按照給定的字元集存儲文件時,在文件的最開頭的三個位元組中就有可能存儲著編碼信息,所以,基本的原理就是只要讀出文件前三個位元組,判定這些位元組的值,就可以得知其編碼的格式。其實,如果項目運行的平台就是中文操作系統,如果這些文本文件在項目內產生,即開發人員可以控制文本的編碼格式,只要判定兩種常見的編碼就可以了:GBK和UTF-8。由於中文Windows默認的編碼是GBK,所以一般只要判定UTF-8編碼格式。
對於UTF-8編碼格式的文本文件,其前3個位元組的值就是-17、-69、-65,所以,判定是否是UTF-8編碼格式的代碼片段如下:
[java] view plain
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-8");
else
System.out.println(file.getName() + ":可能是GBK,也可能是其他編碼");

2:若想實現更復雜的文件編碼檢測,可以使用一個開源項目cpdetector,它所在的網址是:http://cpdetector.sourceforge.net/。它的類庫很小,只有500K左右,cpDetector是基於統計學原理的,不保證完全正確,利用該類庫判定文本文件的代碼如下:
讀外部文件(先利用cpdetector檢測文件的編碼格式,然後用檢測到的編碼方式去讀文件):

[java] view plain
/**
* 利用第三方開源包cpdetector獲取文件編碼格式
*
* @param path
* 要判斷文件編碼格式的源文件的路徑
* @author huanglei
* @version 2012-7-12 14:05
*/
public static String getFileEncode(String path) {
/*
* detector是探測器,它把探測任務交給具體的探測實現類的實例完成。
* cpDetector內置了一些常用的探測實現類,這些探測實現類的實例可以通過add方法 加進來,如ParsingDetector、
* JChardetFacade、ASCIIDetector、UnicodeDetector。
* detector按照「誰最先返回非空的探測結果,就以該結果為准」的原則返回探測到的
* 字元集編碼。使用需要用到三個第三方JAR包:antlr.jar、chardet.jar和cpdetector.jar
* cpDetector是基於統計學原理的,不保證完全正確。
*/
CodepageDetectorProxy detector = CodepageDetectorProxy.getInstance();
/*
* ParsingDetector可用於檢查HTML、XML等文件或字元流的編碼,構造方法中的參數用於
* 指示是否顯示探測過程的詳細信息,為false不顯示。
*/
detector.add(new ParsingDetector(false));
/*

㈡ java判斷文件編碼格式 怎麼判斷編碼格式

UTF-8編碼的文本文檔,有的帶有BOM (Byte Order Mark, 位元組序標志),即0xEF, 0xBB, 0xBF,有的沒有。Windows下的txt文本編輯器在保存UTF-8格式的文本文檔時會自動添加BOM到文件頭。在判斷這類文檔時,可以根據文檔的前3個位元組來進行判斷。然而BOM不是必需的,而且也不是推薦的。對不希望UTF-8文檔帶有BOM的程序會帶來兼容性問題,例如Java編譯器在編譯帶有BOM的UTF-8源文件時就會出錯。而且BOM去掉了UTF-8一個期望的特性,即是在文本全部是ASCII字元時UTF-8是和ASCII一致的,即UTF-8向下兼容ASCII。
在具體判斷時,如果文檔不帶有BOM,就無法根據BOM做出判斷,而且IsTextUnicode API也無法對UTF-8編碼的Unicode字元串做出判斷。那在編程判斷時就要根據UTF-8字元編碼的規律進行判斷了。
UTF-8是一種多位元組編碼的字元集,表示一個Unicode字元時,它可以是1個至多個位元組,在表示上有規律:
1位元組:0xxxxxxx
2位元組:110xxxxx 10xxxxxx
3位元組:1110xxxx 10xxxxxx 10xxxxxx
4位元組:11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
這樣就可以根據上面的特徵對字元串進行遍歷來判斷一個字元串是不是UTF-8編碼了。
舉例代碼:
java.io.File f=new java.io.File("待判定的文本文件名");
try{
java.io.InputStream ios=new java.io.FileInputStream(f);
byte[] b=new byte[3];
ios.read(b);
ios.close();
if(b[0]==-17&&b[1]==-69&&b[2]==-65)
System.out.println(f.getName()+"編碼為UTF-8");
else System.out.println(f.getName()+"可能是GBK");
}catch(Exception e){
e.printStackTrace();
}

㈢ 關於java查詢資料庫字元集的問題

1. JDBC連接串要有字元集設置
jdbc:sybase:Tds:192.168.3.11:5000/Wfis_db?charset=cp936

我項目中的寫法:

Db.url=jdbc:sybase:Tds:angkor[伺服器名或IP]:5000/angkor[資料庫名]?charset=eucgb
2. 伺服器配置成cp936
(3) 因為上面的列表中沒有安裝cp936,所以就安裝cp936字元集
進入目錄C:\sybase\charsets\cp936
運行命令 charset -Usa -Plongtop binary.srt cp936
運行完成後,系統就安裝了cp936字元集

(4) 驗證是否確實安裝了cp936字元集
isql -Usa -Plongtop
>use master
>go
>select id,name from syscharsets
>go
id name
(5) 把系統的當前預設字元集設置為cp936
>sp_configure "default char",171
>go
In changing the default sort order, you have also reconfigured SQL Server's
default character set.
Parameter Name Default Memory Used Config Value
Run Value Unit Type
------------------------------ ----------- ----------- ------------
----------- -------------------- ----------
default character set id 2 0 171
2 id static

(1 row affected)
Configuration option changed. Since the option is static, Adaptive Server must
be rebooted in order for the change to take effect.
Changing the value of 'default character set id' to '171' increases the amount
of memory ASE uses by 6 K.
(return status = 0)

(6) 重啟Sybase服務,使更改生效
第一次重啟,系統會對已經存在的數據進行轉換,轉換完成後自動停止服務,只要再次啟動服務就可以了。

(7) 更改DB客戶端的字元集
DBArtisan中要更改客戶端的字元集為cp936才能連接cp936的伺服器
通過菜單\Logfile\Options...打開對話框,選擇Connection標簽,
更改Client Character輸入框的值為cp936。

資料庫的charset修改為cp936時,使用isql按如下的方式
isql -Usa -Plongtop -Sdbserver -Jcp936

㈣ Java中字元集有哪些呢

字元集(character set)是一個系統支持的所有抽象字元的集合。字元(character)就是各種文字和符號,包括國家文字、標點符號、圖形符號、數字等。

如果僅僅是抽象的字元集,其實是顧名思義的,但是我們常說的字元集,其實是指編碼字元集(coded character set),比如: Unicode、ASCII、GB2312、GBK等等。什麼是編碼字元集呢?編碼字元集是指,這個字元集里的每一個字元,都對應到唯一的一個代碼值,這些代碼值叫做代碼點(code point),可以看做是這個字元在編碼字元集里的序號,字元在給定的編碼方式下的二進制比特序列稱為代碼單元(code unit)。在Unicode字元集中,字母A對應的數值是十六進制下的0041,書寫時前面加U+,所以Unicode里A的代碼點是U+0041。

常見的編碼字元集有:

學習相關java類知識,推薦來北京尚學堂,優秀的師資和科學的授課方式,會帶給你完美的學習體驗。

㈤ java在不知道字元串的字元集的情況下如何判斷它的位元組長度

可以通過程序判斷,將字元分為漢字和非漢字處理。一個漢字占兩個位元組一個非漢字佔一個位元組處理,漢字可以通過他的ascii碼區間來區分 str.getBytes("ascii");試試

㈥ Java: 如何知道一個字元串當前是什麼字元集

判斷java字元串的字元集有多種方法,我們一一討論如下:
1、通過把未知編碼字元串,用猜想的編碼再解碼,觀察字元串是不是正確還原了。
原理:假如目標編碼沒有數組中的字元,那麼編碼會破壞,無法還原。
缺點:假如字元少,而正巧錯誤的猜想編碼中有這種位元組,就會出錯。
如:new String("tested str".getBytes("enc"),"enc")
2、大多數時候,我們只要判斷本地平台編碼和utf8,utf8編碼相當有規律,所以可以分析是否是utf8,否則使用本地編碼。
原理:分析byte[]來判斷規律。
缺點:有時,個別本地編碼位元組在utf8中也會出現,導致出錯,需要分析。
如:判斷是否utf-8代碼:
public static boolean isValidUtf8(byte[] b,int aMaxCount){
int lLen=b.length,lCharCount=0;
for(int i=0;i
byte lByte=b[i++];//to fast operation, ++ now, ready for the following for(;;)
if(lByte>=0) continue;//>=0 is normal ascii
if(lByte<(byte)0xc0 || lByte>(byte)0xfd) return false;
int lCount=lByte>(byte)0xfc?5:lByte>(byte)0xf8?4
:lByte>(byte)0xf0?3:lByte>(byte)0xe0?2:1;
if(i+lCount>lLen) return false;
for(int j=0;j=(byte)0xc0) return false;
}
return true;

㈦ java 怎麼判斷編碼是utf-8 還是gbk

你是要判斷字元還是判斷文件的編碼,若是字元:
String
str="123456";
String
type
=
"utf-8";
//更換這里進行其他編碼判斷
try
{
if
(str.equals(new
String(str.getBytes(type
),
type
)))
{
return
type;
}
}
catch
(Exception
e)
{
}
如果是文件,麻煩一些,可以使用一個開源項目cpdetector,這個我也沒用過,你自己查一下吧

㈧ java中如何判斷一個字元是不是半個中文字元

從完全的角度,是判斷不了的。
只是單從某個字元集考慮,是可以判斷,如GB2312,根據GB2312的編碼規則判斷
~
~
~

㈨ 怎麼使用java判斷一個字元串是屬於什麼編碼

樓上全是傻X, 這樣沒有的,使用開源組件吧detector.jar

用法很簡單

/*------------------------------------------------------------------------
detector是探測器,它把探測任務交給具體的探測實現類的實例完成。
cpDetector內置了一些常用的探測實現類,這些探測實現類的實例可以通過add方法
加進來,如ParsingDetector、 JChardetFacade、ASCIIDetector、UnicodeDetector。
detector按照「誰最先返回非空的探測結果,就以該結果為准」的原則返回探測到的
字元集編碼。
--------------------------------------------------------------------------*/
CodepageDetectorProxy detector = CodepageDetectorProxy.getInstance();
/*-------------------------------------------------------------------------
ParsingDetector可用於檢查HTML、XML等文件或字元流的編碼,構造方法中的參數用於
指示是否顯示探測過程的詳細信息,為false不顯示。
---------------------------------------------------------------------------*/
detector.add(new ParsingDetector(false));
/*--------------------------------------------------------------------------
JChardetFacade封裝了由Mozilla組織提供的JChardet,它可以完成大多數文件的編碼
測定。所以,一般有了這個探測器就可滿足大多數項目的要求,如果你還不放心,可以
再多加幾個探測器,比如下面的ASCIIDetector、UnicodeDetector等。
---------------------------------------------------------------------------*/
detector.add(JChardetFacade.getInstance());
//ASCIIDetector用於ASCII編碼測定
detector.add(ASCIIDetector.getInstance());
//UnicodeDetector用於Unicode家族編碼的測定
detector.add(UnicodeDetector.getInstance());
java.nio.charset.Charset charset = null;
File f=new File("E://specialCar//test.csv");
try {
charset = detector.detectCodepage(new BufferedInputStream(new FileInputStream(f)),100);
} catch (Exception ex) {ex.printStackTrace();}
if(charset!=null){
System.out.println(f.getName()+"編碼是:"+charset.name());
}else{
System.out.println(f.getName()+"未知");
}


採納哈

㈩ 幾種判斷字元集編碼的方法(Java) 未完

如果是Java的String對象的話,則一定是Unicode的,這個沒有為什麼,Java就是這么定的。

我猜你的問題應該是如何判斷一段位元組流是什麼編碼類型,對嗎?比如一個文件,或是網路上面取下來的一段Byte數組,你需要用一個合適的編碼來解析成字元串。

這個讓你失望了,沒有一個文檔化的,確定的方法來判斷,只能用測試的方法,這個方法也只是猜測,不能百分百的確定,方法如下:

  • 用常見的編碼方式對位元組流進行解碼,比如Unicode,UTF8, UTF8 without BOM,UTF16, ANSI等等。

  • 對解析的結果進行判斷,是不是一個合理的可列印字元,可列印字元最多的解碼方式就是最可能的編碼了。

  • 如何判斷可列印字元?流程如下:把解析好的字元串按照字元進行遍歷,把每一個字元轉化成Unicode編碼,看看這些編碼是不是Unicode的支持范圍極客。

  • 如果發現有種編碼方式都是可列印字元,那麼再使用本步驟:對字元串進行分詞,分詞這個在此不作贅述,你自己再研究一下。分詞效果好的就是最可能的編碼了。(不過通常到第三步就能搞定了,第四部絕大部分用不著)

閱讀全文

與java判斷字元集相關的資料

熱點內容
收磚機石獅編程培訓廠家 瀏覽:761
吉里吉里2安卓模擬器怎麼用 瀏覽:818
編譯器將匯編代碼 瀏覽:681
電路板加密錯誤 瀏覽:21
java自動機 瀏覽:363
相機連拍解壓 瀏覽:31
linuxssh服務重啟命令 瀏覽:330
茂名氫氣隔膜壓縮機 瀏覽:47
程序員地鐵寫程序 瀏覽:330
java的switchenum 瀏覽:329
pdf瓷器 瀏覽:905
怎樣用adb命令刷機 瀏覽:962
蘋果手機怎麼買app 瀏覽:303
如何找到伺服器連接地址 瀏覽:776
重慶百望伺服器地址 瀏覽:227
python中range後的結果 瀏覽:101
編譯器管理的存儲有哪些 瀏覽:956
顯控觸摸屏與單片機通信 瀏覽:426
宅之便利店app怎麼使用輕應用 瀏覽:320
去外國怎麼下載外國app 瀏覽:269