㈠ java中編碼與解碼分別指什麼
java中編碼:URLEncoder.encode(strUri,"utf-8");
java中解碼碼:URLDecoder.decode(strUri,"utf-8");
㈡ Java中字元集有哪些呢
字元集(character set)是一個系統支持的所有抽象字元的集合。字元(character)就是各種文字和符號,包括國家文字、標點符號、圖形符號、數字等。
如果僅僅是抽象的字元集,其實是顧名思義的,但是我們常說的字元集,其實是指編碼字元集(coded character set),比如: Unicode、ASCII、GB2312、GBK等等。什麼是編碼字元集呢?編碼字元集是指,這個字元集里的每一個字元,都對應到唯一的一個代碼值,這些代碼值叫做代碼點(code point),可以看做是這個字元在編碼字元集里的序號,字元在給定的編碼方式下的二進制比特序列稱為代碼單元(code unit)。在Unicode字元集中,字母A對應的數值是十六進制下的0041,書寫時前面加U+,所以Unicode里A的代碼點是U+0041。
常見的編碼字元集有:
Unicode:也叫統一字元集,它包含了幾乎世界上所有的已經發現且需要使用的字元(如中文、日文、英文、德文等)。
ASCII:早期的計算機系統只能處理英文,所以ASCII也就成為了計算機的預設字元集,包含了英文所需要的所有字元。
GB2312:中文字元集,包含ASCII字元集。ASCII部分用單位元組表示,剩餘部分用雙位元組表示。
GBK:GB2312的擴展,完整包含了GB2312的所有內容。
GB18030:GBK字元集的超集,常叫大漢字字元集,也叫CJK(Chinese,Japanese,Korea)字元集,包含了中、日、韓三國語言中的所有字元。
學習相關java類知識,推薦來北京尚學堂,優秀的師資和科學的授課方式,會帶給你完美的學習體驗。
㈢ Java語言所使用的字元集是什麼
Java語言所使用的字元集是16位Unicode編碼。另外再介紹一些常見的字元集:x0dx0ax0dx0a1、最早在dos下寫pascal的時候,就遇到ASCII字元集,後來還是dos下寫c,也是ascii字元集x0dx0a特點:目前最通用的單位元組編碼字元集x0dx0a表示:單位元組x0dx0a最早ascii用7bit表示,總共能表示2^7=128個字元,後來擴展到8bit,就表示2^8=256個字元x0dx0a2、GB2312又稱為GB2312-80字元集,全稱為《信息交換用漢字編碼字元集·基本集》,由原中國國家標准總局發布,1981年5月1日實施。x0dx0a特點:當然是能表示99%的中國漢字,還包括拉丁字母、日文假名、希臘字母、俄文字母、漢語拼音符號、漢語注音字母等x0dx0a表示:雙位元組x0dx0a3、GBK是漢字編碼標准之一,全稱《漢字內碼擴展規范》,GBK 向下與GB2312編碼兼容,向上支持ISO10646.1國際標准。可以認為GBK是在GB2313基礎上通過內碼擴展出來的一個標准。x0dx0a特點:完全兼容GB2312標准,支持國際標准ISO/IEC10646-1和國家標准GB13000-1中的全部中日韓漢字,並包含了BIG5編碼中的所有漢字x0dx0a表示:雙位元組x0dx0a4、Big5,台灣那邊使用比較多。x0dx0a5、GB 18030,全稱是GB18030-2000《信息交換用漢字編碼字元集基本集的擴充》,是我國政府於2000年3月17日發布的新的漢字編碼國家標准,2001年8月31日後在中國市場上發布的軟體必須符合本標准。x0dx0a特點:就是強大。覆蓋中文、日文、朝鮮語和中國少數民族文字。滿足中國大陸、香港、台灣、日本和韓國等東亞地區信息交換多文種、大字量、多用途、統一編碼格式的要求。並且與Unicode 3.0版本兼容,填補Unicode擴展字元字匯「統一漢字擴展A」的內容。並且與以前的國家字元編碼標准(GB2312,GB13000.1)兼容。x0dx0a表示:單位元組、雙位元組、四位元組三種方式x0dx0a6、Unicode野心更大(當然有一個國際統一標准當然是好事)x0dx0a特點:Unicode是一種在計算機上使用的字元編碼。它為每種語言中的每個字元設定了統一並且唯一的二進制編碼,以滿足跨語言、跨平台進行文本轉換、處理的要求。x0dx0a表示:utf-8,utf-16,utf-32x0dx0a這里可能有點不好理解,舉個例子x0dx0a首先,把unicode理解成對所有字元做了一個統一的編號,比如:「字」這個字元,編號是23383,這個是unicode定義的x0dx0a但是,在計算機中,如何存儲這個編號呢?方式就有很多,存儲unicode的方式,就是utf-8,utf-16,utf-32x0dx0a23383數值的16進製表示:0x5b57x0dx0autf-8用3個位元組來表示漢字,所以utf-8的表示為:0xE5AD97x0dx0autf-16用2個位元組來表示漢字,所以utf-16的表示為:0x5b57 剛好和數值是一樣的x0dx0autf-32用4個位元組來表示漢字,所以utf-32的表示為:0x00005b57 和數值是一樣的,不過浪費空間x0dx0a7、再來講講utf-8,它是一種變長的字元集x0dx0a表示:單位元組來表示字母,雙位元組來表示一些希臘字母,三位元組來表示漢字,當然也有四位元組的x0dx0a這么做當然會增加表示和識別的難度,不過,可以節省空間。這也是為什麼utf-8在網路編碼中流行的原因。x0dx0a
㈣ java字元串默認的是什麼編碼
System.out.println(Charset.defaultCharset());
字元編碼(英語:Character encoding)也稱字集碼,是把字元集中的字元編碼為指定集合中某一對象(例如:比特模式、自然數序列、8位組或者電脈沖),以便文本在計算機中存儲和通過通信網路的傳遞。常見的例子包括將拉丁字母表編碼成摩斯電碼和ASCII。其中,ASCII將字母、數字和其它符號編號,並用7比特的二進制來表示這個整數。通常會額外使用一個擴充的比特,以便於以1個位元組的方式存儲。
在計算機技術發展的早期,如ASCII(1963年)和EBCDIC(1964年)這樣的字元集逐漸成為標准。但這些字元集的局限很快就變得明顯,於是人們開發了許多方法來擴展它們。對於支持包括東亞CJK字元家族在內的寫作系統的要求能支持更大量的字元,並且需要一種系統而不是臨時的方法實現這些字元的編碼。
㈤ Java中的字元採用的是兩個位元組編碼的什麼字元集。
java平台採用UTF-16(Unicode)編碼,一個字元佔2個位元組(不論英文,還是中文字元)。
㈥ java 怎麼獲得文件編碼格式
java課程設計例子
Java如何獲取文件編碼格式
1:簡單判斷是UTF-8或不是UTF-8,因為一般除了UTF-8之外就是GBK,所以就設置默認為GBK。
按照給定的字元集存儲文件時,在文件的最開頭的三個位元組中就有可能存儲著編碼信息,所以,基本的原理就是只要讀出文件前三個位元組,判定這些位元組的值,就可以得知其編碼的格式。其實,如果項目運行的平台就是中文操作系統,如果這些文本文件在項目內產生,即開發人員可以控制文本的編碼格式,只要判定兩種常見的編碼就可以了:GBK和UTF-8。由於中文Windows默認的編碼是GBK,所以一般只要判定UTF-8編碼格式。
對於UTF-8編碼格式的文本文件,其前3個位元組的值就是-17、-69、-65,所以,判定是否是UTF-8編碼格式的代碼片段如下:
Filefile=newFile(path);
InputStreamin=newjava.io.FileInputStream(file);
byte[]b=newbyte[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檢測文件的編碼格式,然後用檢測到的編碼方式去讀文件):
/**
*利用第三方開源包cpdetector獲取文件編碼格式
*
*@parampath
*要判斷文件編碼格式的源文件的路徑
*@authorhuanglei
*@version2012-7-1214:05
*/
(Stringpath){
/*
*detector是探測器,它把探測任務交給具體的探測實現類的實例完成。
*cpDetector內置了一些常用的探測實現類,這些探測實現類的實例可以通過add方法加進來,如ParsingDetector、
*JChardetFacade、ASCIIDetector、UnicodeDetector。
*detector按照「誰最先返回非空的探測結果,就以該結果為准」的原則返回探測到的
*字元集編碼。使用需要用到三個第三方JAR包:antlr.jar、chardet.jar和cpdetector.jar
*cpDetector是基於統計學原理的,不保證完全正確。
*/
CodepageDetectorProxydetector=CodepageDetectorProxy.getInstance();
/*
*ParsingDetector可用於檢查HTML、XML等文件或字元流的編碼,構造方法中的參數用於
*指示是否顯示探測過程的詳細信息,為false不顯示。
*/
detector.add(newParsingDetector(false));
/*
*JChardetFacade封裝了由Mozilla組織提供的JChardet,它可以完成大多數文件的編碼
*測定。所以,一般有了這個探測器就可滿足大多數項目的要求,如果你還不放心,可以
*再多加幾個探測器,比如下面的ASCIIDetector、UnicodeDetector等。
*/
detector.add(JChardetFacade.getInstance());//用到antlr.jar、chardet.jar
//ASCIIDetector用於ASCII編碼測定
detector.add(ASCIIDetector.getInstance());
//UnicodeDetector用於Unicode家族編碼的測定
detector.add(UnicodeDetector.getInstance());
java.nio.charset.Charsetcharset=null;
Filef=newFile(path);
try{
charset=detector.detectCodepage(f.toURI().toURL());
}catch(Exceptionex){
ex.printStackTrace();
}
if(charset!=null)
returncharset.name();
else
returnnull;
}
StringcharsetName=getFileEncode(configFilePath);
System.out.println(charsetName);
inputStream=newFileInputStream(configFile);
BufferedReaderin=newBufferedReader(newInputStreamReader(inputStream,charsetName));讀jar包內部資源文件(先利用cpdetector檢測jar內部的資源文件的編碼格式,然後以檢測到的編碼方式去讀文件):
/**
*利用第三方開源包cpdetector獲取URL對應的文件編碼
*
*@parampath
*要判斷文件編碼格式的源文件的URL
*@authorhuanglei
*@version2012-7-1214:05
*/
(URLurl){
/*
*detector是探測器,它把探測任務交給具體的探測實現類的實例完成。
*cpDetector內置了一些常用的探測實現類,這些探測實現類的實例可以通過add方法加進來,如ParsingDetector、
*JChardetFacade、ASCIIDetector、UnicodeDetector。
*detector按照「誰最先返回非空的探測結果,就以該結果為准」的原則返回探測到的
*字元集編碼。使用需要用到三個第三方JAR包:antlr.jar、chardet.jar和cpdetector.jar
*cpDetector是基於統計學原理的,不保證完全正確。
*/
CodepageDetectorProxydetector=CodepageDetectorProxy.getInstance();
/*
*ParsingDetector可用於檢查HTML、XML等文件或字元流的編碼,構造方法中的參數用於
*指示是否顯示探測過程的詳細信息,為false不顯示。
*/
detector.add(newParsingDetector(false));
/*
*JChardetFacade封裝了由Mozilla組織提供的JChardet,它可以完成大多數文件的編碼
*測定。所以,一般有了這個探測器就可滿足大多數項目的要求,如果你還不放心,可以
*再多加幾個探測器,比如下面的ASCIIDetector、UnicodeDetector等。
*/
detector.add(JChardetFacade.getInstance());//用到antlr.jar、chardet.jar
//ASCIIDetector用於ASCII編碼測定
detector.add(ASCIIDetector.getInstance());
//UnicodeDetector用於Unicode家族編碼的測定
detector.add(UnicodeDetector.getInstance());
java.nio.charset.Charsetcharset=null;
try{
charset=detector.detectCodepage(url);
}catch(Exceptionex){
ex.printStackTrace();
}
if(charset!=null)
returncharset.name();
else
returnnull;
}
URLurl=CreateStationTreeModel.class.getResource("/resource/"+"配置文件");
URLConnectionurlConnection=url.openConnection();
inputStream=urlConnection.getInputStream();
StringcharsetName=getFileEncode(url);
System.out.println(charsetName);
BufferedReaderin=newBufferedReader(newInputStreamReader(inputStream,charsetName));
3:探測任意輸入的文本流的編碼,方法是調用其重載形式:
charset=detector.detectCodepage(待測的文本輸入流,測量該流所需的讀入位元組數);
上面的位元組數由程序員指定,位元組數越多,判定越准確,當然時間也花得越長。要注意,位元組數的指定不能超過文本流的最大長度。
4:判定文件編碼的具體應用舉例:
屬性文件(.properties)是Java程序中的常用文本存儲方式,象STRUTS框架就是利用屬性文件存儲程序中的字元串資源。它的內容如下所示:
#注釋語句
屬性名=屬性值
讀入屬性文件的一般方法是:
FileInputStreamios=newFileInputStream(「屬性文件名」);
Propertiesprop=newProperties();
prop.load(ios);
Stringvalue=prop.getProperty(「屬性名」);
ios.close();
利用java.io.Properties的load方法讀入屬性文件雖然方便,但如果屬性文件中有中文,在讀入之後就會發現出現亂碼現象。發生這個原因是load方法使用位元組流讀入文本,在讀入後需要將位元組流編碼成為字元串,而它使用的編碼是「iso-8859-1」,這個字元集是ASCII碼字元集,不支持中文編碼,
方法一:使用顯式的轉碼:
Stringvalue=prop.getProperty(「屬性名」);
StringencValue=newString(value.getBytes(「iso-8859-1″),」屬性文件的實際編碼」);
方法二:象這種屬性文件是項目內部的,我們可以控制屬性文件的編碼格式,比如約定採用Windows內定的GBK,就直接利用」gbk」來轉碼,如果約定採用UTF-8,就使用」UTF-8″直接轉碼。
方法三:如果想靈活一些,做到自動探測編碼,就可利用上面介紹的方法測定屬性文件的編碼,從而方便開發人員的工作
補充:可以用下面代碼獲得Java支持編碼集合:
Charset.availableCharsets().keySet();
可以用下面的代碼獲得系統默認編碼:
Charset.defaultCharset();
㈦ 幾種判斷字元集編碼的方法(Java) 未完
如果是Java的String對象的話,則一定是Unicode的,這個沒有為什麼,Java就是這么定的。
我猜你的問題應該是如何判斷一段位元組流是什麼編碼類型,對嗎?比如一個文件,或是網路上面取下來的一段Byte數組,你需要用一個合適的編碼來解析成字元串。
這個讓你失望了,沒有一個文檔化的,確定的方法來判斷,只能用測試的方法,這個方法也只是猜測,不能百分百的確定,方法如下:
用常見的編碼方式對位元組流進行解碼,比如Unicode,UTF8, UTF8 without BOM,UTF16, ANSI等等。
對解析的結果進行判斷,是不是一個合理的可列印字元,可列印字元最多的解碼方式就是最可能的編碼了。
如何判斷可列印字元?流程如下:把解析好的字元串按照字元進行遍歷,把每一個字元轉化成Unicode編碼,看看這些編碼是不是Unicode的支持范圍極客。
如果發現有種編碼方式都是可列印字元,那麼再使用本步驟:對字元串進行分詞,分詞這個在此不作贅述,你自己再研究一下。分詞效果好的就是最可能的編碼了。(不過通常到第三步就能搞定了,第四部絕大部分用不著)
㈧ JAVA中怎樣改變本地字元集編碼
System.out.println(new String(strInfo.getBytes("ISO-8859-1"),"gb2312")); 你在輸出的時候這么轉碼,還會輸出亂碼,見鬼了
㈨ 如何查找默認的字元集/編碼在Java中
1, Java代碼直接設置
System.out.println(System.getProperty("file.encoding"));
或
System.out.println(Charset.defaultCharset());
2,eclipse裡面選中工程->properties->Resource:text file encoding 改成你的原文件編碼格式即可;
3,一般配置jdbc連接字元串的時候可以指定字元編碼集,指定成和資料庫的編碼一致即可,這樣用jdbc讀出來的數據就是解碼後的正常的數據。當然,不同的資料庫產品具體看怎麼辦。