鍍金池/ 教程/ Java/ 認識字符集
編碼詳情
java編碼轉換過程
認識字符集
javaWeb中的編碼解碼
認識字符集
總結
java是如何編碼解碼的
解決URL中文亂碼問題
JSP頁面編碼過程

認識字符集

在上篇博文(java中文亂碼解決之道(一)—–認識字符集)中,LZ簡單介紹了主流的字符編碼,對各種編碼都是點到為止,以下LZ將詳細闡述字符集、字符編碼等基礎知識和ASCII、GB的詳情。

一、基礎知識

在了解各種字符集之前我們需要了解一些最基礎的知識,如:編碼、字符、字符集、字符編碼基礎知識。

編碼

計算機中存儲的信息都是用二進制表示的,我們在屏幕上所看到文字、圖片等都是通過二進制轉換的結果。編碼是信息從一種形式或格式轉換為另一種形式的過程,通俗點講就是就是將我們看到的文字、圖片等信息按照某種規(guī)則存儲在計算機中,例如‘c’在計算機中怎么表達,‘陳’在計算機中怎么表達,這個過程就稱之為編碼。解碼是編碼的逆過程,它是將存儲在計算機的二進制轉換為我們可以看到的文字、圖片等信息,它體現的是視覺上的刺激。

n位二進制數可以組合成2的n次方個不同的信息,給每個信息規(guī)定一個具體碼組,這種過程也叫編碼。

在編碼和解碼中,他們就如加密、解密一般,他們一定會遵循某個規(guī)則,即y = f(x),那么x = f(y);否則在解密過程就會導致‘a’解析成‘b’或者亂碼。

字符

字符是可使用多種不同字符方案或代碼頁來表示的抽象實體,它是一個單位的字形、類字形單位或符號的基本信息,也是各種文字和符號的總稱,包括各國家文字、標點符號、圖形符號、數字等。

字符是指計算機中使用的字母、數字、字和符號,包括:1、2、3、A、B、C、~!·#¥%……—*()——+等等。在 ASCII 編碼中,一個英文字母字符存儲需要1個字節(jié)。在 GB 2312 編碼或 GBK 編碼中,一個漢字字符存儲需要2個字節(jié)。在UTF-8編碼中,一個英文字母字符存儲需要1個字節(jié),一個漢字字符儲存需要3到4個字節(jié)。在UTF-16編碼中,一個英文字母字符或一個漢字字符存儲都需要2個字節(jié)(Unicode擴展區(qū)的一些漢字存儲需要4個字節(jié))。在UTF-32編碼中,世界上任何字符的存儲都需要4個字節(jié)。

http://wiki.jikexueyuan.com/project/java-chinese-garbled-solution/images/2.1.png" alt="" />

字符集

字符是各種文字和符號的總稱,而字符集則是多個字符的集合,字符集種類較多,每個字符集包含的字符個數不同。而計算機要準確的處理各種字符集文字,需要進行字符編碼,以便計算機能夠識別和存儲各種文字。

常見字符集名稱:ASCII字符集、GB2312字符集、BIG5字符集、 GB18030字符集、Unicode字符集等。

字符編碼

計算機中的信息包括數據信息和控制信息,然而不管是那種信息,他們都是以二進制編碼的方式存入計算機中,但是他們是怎么展示在屏幕上的呢?同時在展現過程中如何才能保證他們不出錯?這個時候字符編碼就起到了重要作用!字符編碼是一套規(guī)則,一套建立在符合集合與數字系統(tǒng)之間的對應關系之上的規(guī)則,它是信息處理的基本技術。

使用字符編碼這套規(guī)則能夠對自然語言的字符的一個集合(如字母表或音節(jié)表),與其他東西的一個集合(如號碼或電脈沖)進行配對。

http://wiki.jikexueyuan.com/project/java-chinese-garbled-solution/images/2.2.png" alt="" />

二、ASCII

2.1、標準ASCII碼

ASCII(American Standard Code for Information Interchange,美國信息交換標準代碼)是基于拉丁字母的一套電腦編碼系統(tǒng)。它主要用于顯示現代英語和其他西歐英語,它是現今最通用的單字節(jié)編碼系統(tǒng)。

ASCII使用7位或者8位來表示128或者256種可能的字符。標準的ASCII碼則是使用7位二進制數來表示所有的大小寫字母、數字、標點符合和一些控制字符,其中:

0~31、127(共33個)是控制字符或者通信專用字符,如控制符:LF(換行)、CR(回車)、DEL(刪除)等;通信專用字符:SOH(文頭)、EOT(文尾)、ACK(確認)等。ASCII值為8、9、10、13分別表示退格、制表、換號、回車字符。

32~126(共95個)字符,32為空格、48~57為阿拉伯數字、65~90為大寫字母、97~122為小寫字母,其余為一些標點符號和運算符號!

前面提過標準的ASCII碼是使用七位來表示字符的,而最高位(b7)則是用作奇偶校驗的。所謂奇偶校驗,是指在代碼傳送過程中用來檢驗是否出現錯誤的一種方法,一般分奇校驗和偶校驗兩種。奇校驗規(guī)定:正確的代碼一個字節(jié)中1的個數必須是奇數,若非奇數,則在最高位b7添1;偶校驗規(guī)定:正確的代碼一個字節(jié)中1的個數必須是偶數,若非偶數,則在最高位b7添1。 (參考百度百科)

下面是ASCII字符對照表,更多詳情請關注:》》 ASCII碼表《《

http://wiki.jikexueyuan.com/project/java-chinese-garbled-solution/images/2.3.png" alt="" />

http://wiki.jikexueyuan.com/project/java-chinese-garbled-solution/images/2.4.png" alt="" />

2.2、擴展ASCII碼

標準的ASCII是用七位來表示的,那么它的缺陷就非常明顯了:只能顯示26個基本拉丁字母、阿拉伯數目字和英式標點符號,基本上只能應用于現代美國英語,對于其他國家,128個字符肯定不夠。于是,這些歐洲國家決定利用字節(jié)中閑置的最高位編入新的符號,這樣一來,可以表達的字符數最多就為256個,但是隨著產生的問題也就來了:不同的國家有不同的字母,可能同一個編碼在不同的國家所表示的字符不同。但是不管怎么樣,在這些編碼中0~127所表示的字符肯定是一樣的,不一樣的也只是128~255這一段。

8位的ASCII在歐洲國家表現的不盡人意,那么在其他國家就更加不用說了,我們擁有五千年歷史文化的中華名族所包含的漢字多大10多萬,不知道是多少個256。所以一個字節(jié)8位表示的256個字符肯定是不夠的,那么兩個字節(jié)呢?可能夠了吧!我們常見的漢字就是用兩個字節(jié)表示的,如GB2312。

http://wiki.jikexueyuan.com/project/java-chinese-garbled-solution/images/2.5.jpg" alt="" />

三、GB**

對于歐美國家來說,ASCII能夠很好的滿足用戶的需求,但是當我們中華名族使用計算機時,ASCII明顯就不滿足需求了,有5000年歷史文化的我們,擁有的漢字達到將近10萬,所以為了顯示中文,我們必須設計一套編碼規(guī)則用于將漢字轉換為計算機可以接受的數字系統(tǒng)的數。顯示中文的常用字符編碼有:GB2312、GBK、GB18030。

GB2312

GB2312,中國國家標準簡體中文字符集,全稱《信息交換用漢字編碼字符集·基本集》,由中國國家標準總局發(fā)布,1981年5月1日實施。

GB2312編碼的規(guī)則:一個小于127的字符的意義與原來相同,但兩個大于127的字符連在一起時,就表示一個漢字,前面的一個字節(jié)(他稱之為高字節(jié))從0xA1用到 0xF7,后面一個字節(jié)(低字節(jié))從0xA1到0xFE,這樣我們就可以組合出大約7000多個簡體漢字了。在這些編碼里,還把數學符號、羅馬希臘的 字母、日文的假名們都編進去了,連在ASCII里本來就有的數字、標點、字母都統(tǒng)統(tǒng)重新編了兩個字節(jié)長的編碼,這就是常說的”全角”字符,而原來在127 號以下的那些就叫”半角”字符了。

在GB2312中,GB2312共收錄6763個漢字,其中一級漢字3755個,二級漢字3008個,還收錄了拉丁字母、希臘字母、日文等682個全角字符。由于GB2312的出現,它基本上解決了我們日常的需要,它所收錄的漢子已經覆蓋了中國大陸99.75%的使用平率。但是我國文化博大精深,對于人名、古漢語等方面出現的罕用字,GB2312還是不能處理,于是后面的GBK和GB18030漢字字符集出現了。

GB2312字符集庫非常龐大,詳情:GB2312簡體中文編碼表

GBK

GBK,全稱《漢字內碼擴展規(guī)范》,由中華人民共和國全國信息技術標準化技術委員會1995年12月1日制訂,也是漢字編碼的標準之一。

GBK是GB2312的擴展,他向下與GB2312兼容,,向上支持 ISO 10646.1 國際標準,是前者向后者過渡過程中的一個承上啟下的標準。同時它是使用雙字節(jié)編碼方案,其編碼范圍從8140至FEFE(剔除xx7F),首字節(jié)在 81-FE 之間,尾字節(jié)在 40-FE 之間,共23940個碼位,共收錄了21003個漢字。

GB18030

GB18030,國家標準GB18030《信息技術 中文編碼字符集》,是我國計算機系統(tǒng)必須遵循的基礎性標準之一。它有兩個版本:GB18030-2000、GB18030-2005。其中GB18030-2000僅規(guī)定了常用非漢字符號和27533個漢字(包括部首、部件等)的編碼,而GB18030-2005是全文強制性標準,市場上銷售的產品必須符合,它是GB18030-2000的基礎上增加了42711個漢字和多種我國少數民族文字的編碼。

GB18030標準采用單字節(jié)、雙字節(jié)和四字節(jié)三種方式對字符編碼。(碼位總體結構見下圖)

單字節(jié)部分采用GB/T 11383的編碼結構與規(guī)則,使用0×00至0×7F碼位(對應于ASCII碼的相應碼位)。雙字節(jié)部分,首字節(jié)碼位從0×81至0×FE,尾字節(jié)碼位分別是0×40至0×7E和0×80至0×FE。四字節(jié)部分采用GB/T 11383未采用的0×30到0×39作為對雙字節(jié)編碼擴充的后綴,這樣擴充的四字節(jié)編碼,其范圍為0×81308130到0×FE39FE39。其中第一、三個字節(jié)編碼碼位均為0×81至0×FE,第二、四個字節(jié)編碼碼位均為0×30至0×39。

http://wiki.jikexueyuan.com/project/java-chinese-garbled-solution/images/2.6.jpg" alt="" />

四、參考文獻&進一步閱讀

編碼:http://baike.baidu.com/subview/237708/11062012.htm(百度百科)

字符:http://baike.baidu.com/view/263416.htm(百度百科)

字符集:http://baike.baidu.com/view/51987.htm(百度百科)

字符編碼:http://baike.baidu.com/view/1204863.htm(百度百科)

字符集和字符編碼:http://www.cnblogs.com/skynet/archive/2011/05/03/2035105.html(吳秦)

ASCII:http://baike.baidu.com/view/15482.htm

GB2312:http://baike.baidu.com/view/443268.htm

GBK:http://baike.baidu.com/view/931619.htm

GB18030:http://baike.baidu.com/view/889058.htm

上一篇:總結下一篇:解決URL中文亂碼問題