Java學習(18) -- 編碼方式

一、Unicode 

Unicode(統一碼、萬國碼、單一碼)是計算機科學領域裏的一項業界標準,包括字符集、編碼方案等。Unicode 是爲了解決傳統的字符編碼方案的侷限而產生的,它爲每種語言中的每個字符設定了統一併且唯一的二進制編碼,以滿足跨語言、跨平臺進行文本轉換、處理的要求。

二、有了Unicode 爲什麼還需要UTF-8

互聯網的普及,強烈要求出現一種統一的編碼方式。UTF-8 就是在互聯網上使用最廣的一種 Unicode 的實現方式。其他實現方式還包括 UTF-16(字符用兩個字節或四個字節表示)和 UTF-32(字符用四個字節表示),不過在互聯網上基本不用。重複一遍,這裏的關係是,UTF-8 是 Unicode 的實現方式之一

UTF-8 最大的一個特點,就是它是一種變長的編碼方式。它可以使用1~4個字節表示一個符號,根據不同的符號而變化字節長度。

UTF-8 的編碼規則很簡單,只有二條:

1)對於單字節的符號,字節的第一位設爲0,後面7位爲這個符號的 Unicode 碼。因此對於英語字母,UTF-8 編碼和 ASCII 碼是相同的。

2)對於n字節的符號(n > 1),第一個字節的前n位都設爲1,第n + 1位設爲0,後面字節的前兩位一律設爲10。剩下的沒有提及的二進制位,全部爲這個符號的 Unicode 碼。

 三、GB2312、GBK、GB18030 這幾種字符集的主要區別是什麼

1 GB2312-80

GB 2312 或 GB 2312-80 是中國國家標準簡體中文字符集,全稱《信息交換用漢字編碼字符集·基本集》,又稱 GB 0,由中國國家標準總局發佈,1981 年 5 月 1 日實施。GB 2312 編碼通行於中國大陸;新加坡等地也採用此編碼。中國大陸幾乎所有的中文系統和國際化的軟件都支持 GB 2312。

GB 2312 標準共收錄 6763 個漢字,其中一級漢字 3755 個,二級漢字 3008 個;同時收錄了包括拉丁字母、希臘字母、日文平假名及片假名字母、俄語西裏爾字母在內的 682 個字符。

  • GB 2312 的出現,基本滿足了漢字的計算機處理需要,它所收錄的漢字已經覆蓋中國大陸99.75% 的使用頻率。
  • 對於人名、古漢語等方面出現的罕用字,GB 2312 不能處理,這導致了後來 GBK 及 GB 18030 漢字字符集的出現。


GB 2312 對任意一個圖形字符都採用兩個字節表示,並對所收漢字進行了“分區”處理,每區含有 94 個漢字/符號,分別對應第一字節和第二字節。這種表示方式也稱爲區位碼。

  • 01-09 區爲特殊符號。
  • 16-55 區爲一級漢字,按拼音排序。
  • 56-87 區爲二級漢字,按部首/筆畫排序。

10-15 區及 88-94 區則未有編碼。
GB 2312 的編碼範圍爲 2121H-777EH,與 ASCII 有重疊,通行方法是將 GB 碼兩個字節的最高位置 1 以示區別。

2 GBK

GBK 漢字內碼擴展規範爲漢語拼音 Kuo Zhan(擴展)中“擴”字的聲母。英文全稱 Chinese Internal Code Specification。

GBK 共收入 21886 個漢字和圖形符號,包括:

  • GB 2312 中的全部漢字、非漢字符號。
  • BIG5 中的全部漢字。
  • 與 ISO 10646 相應的國家標準 GB 13000 中的其它 CJK 漢字,以上合計 20902 個漢字。
  • 其它漢字、部首、符號,共計 984 個。

GBK 向下與 GB 2312 完全兼容,向上支持 ISO 10646 國際標準,在前者向後者過渡過程中起到的承上啓下的作用。

GBK 採用雙字節表示,總體編碼範圍爲 8140-FEFE 之間,首字節在 81-FE 之間,尾字節在 40-FE 之間,剔除 XX7F 一條線。GBK 編碼區分三部分:

  • 漢字區 包括

GBK/2:OXBOA1-F7FE, 收錄 GB 2312 漢字 6763 個,按原序排列;
GBK/3:OX8140-AOFE,收錄 CJK 漢字 6080 個;
GBK/4:OXAA40-FEAO,收錄 CJK 漢字和增補的漢字 8160 個。

  • 圖形符號區 包括

GBK/1:OXA1A1-A9FE,除 GB 2312 的符號外,還增補了其它符號
GBK/5:OXA840-A9AO,擴除非漢字區。

  • 用戶自定義區

GBK 區域中的空白區,用戶可以自己定義字符。

3 GB18030

GB 18030,全稱:國家標準 GB 18030-2005《信息技術中文編碼字符集》,是中華人民共和國現時最新的內碼字集,是 GB 18030-2000《信息技術信息交換用漢字編碼字符集基本集的擴充》的修訂版。
GB 18030 與 GB 2312-1980 和 GBK 兼容,共收錄漢字70244個。

  • 與 UTF-8 相同,採用多字節編碼,每個字可以由 1 個、2 個或 4 個字節組成。
  • 編碼空間龐大,最多可定義 161 萬個字符。
  • 支持中國國內少數民族的文字,不需要動用造字區。
  • 漢字收錄範圍包含繁體漢字以及日韓漢字

GB 18030 編碼是一二四字節變長編碼。

  • 單字節,其值從 0 到 0x7F,與 ASCII 編碼兼容。
  • 雙字節,第一個字節的值從 0x81 到 0xFE,第二個字節的值從 0x40 到 0xFE(不包括0x7F),與 GBK 標準兼容。
  • 四字節,第一個字節的值從 0x81 到 0xFE,第二個字節的值從 0x30 到 0x39,第三個字節從0x81 到 0xFE,第四個字節從 0x30 到 0x39。

四、如何解決亂碼問題

1) Tomcat配置URIEncoding=UTF-8

2)http請求亂碼問題

       在servlet頁面添加:response.setCharcacterEncoding("utf-8")

       URL進行URIEncoding編碼

3) 代碼轉碼

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章