常見字符集及編碼

基本概念

  • 字符(Character) 是各類文字和符號的總稱,包括各國家文字、標點符號、圖形符號、數字等。
  • 字符集(Character set) 是一個系統支持的全部抽象字符的集合。一般以二維表的形式存在,二維表的內容和大小是由使用者的語言而定。如ASCII,GBxxx,Unicode等。
  • 字符編碼(Character encoding) 是把字符集中的字符編碼爲特定的二進制數,以便在計算機中存儲。每一個字符集中的字符都對應一個惟一的二進制編碼。

字符集和字符編碼通常都是成對出現的,如ASCII、IOS-8859-一、GB23十二、GBK,都是即表示了字符集又表示了對應的字符編碼。Unicode比較特殊,有多種字符編碼(UTF-8,UTF-16等)html


常見字符集及編碼

1. ASCII字符集&編碼

ASCII(American Standard Code for Information Interchange, 美國信息交換標準代碼)是基於拉丁字母的一套電腦編碼系統。它主要用於顯示現代英語,而其擴展版本EASCII則能夠部分支持其餘西歐語言,並等同於國際標準ISO/IEC 646編程

字符集範圍

ASCII一共定義了128個字符,包括33個控制字符,和95個可顯示字符。大部分的控制字符已經被廢棄。編程語言

編碼格式

ASCII碼爲單字節,用7位二進制數表示,因爲計算機1個字節是8位二進制數,因此最高位爲0,即00000000-011111110x00-0x7F
這裏寫圖片描述
Unicode,GBXXX,UTF-8等字符編碼都兼容ASCII編碼。編碼

EASCII(Extended ASCII,延伸美國標準信息交換碼)是將ASCII碼由7位擴充爲8位而成。EASCII的內碼是由0到255共有256個字符組成。EASCII碼比ASCII碼擴充出來的符號包括表格符號、計算符號、希臘字母和特殊的拉丁符號。操作系統


2. GB2312字符集&編碼

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

字符集範圍

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

GB 2312的出現,基本知足了漢字的計算機處理須要,它所收錄的漢字已經覆蓋中國大陸99.75%的使用頻率。但對於人名、古漢語等方面出現的罕用字和繁體字,GB 2312不能處理,所以後來GBK及GB 18030漢字字符集相繼出現以解決這些問題。orm

分區

GB 2312中對所收漢字進行了「分區」處理,每區含有94個漢字/符號。這種表示方式也稱爲區位碼。htm

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

舉例來講,「啊」字是GB 2312之中的第一個漢字,它的區位碼就是1601。
10–15區及88–94區則未有編碼。blog

編碼格式

在使用GB 2312的程序一般採用EUC儲存方法,以便兼容於ASCII。
每一個漢字及符號以兩個字節來表示。第一個字節稱爲「高位字節」,第二個字節稱爲「低位字節」。
「高位字節」使用了0xA1–0xF7(把01–87區的區號加上0xA0),「低位字節」使用了0xA1–0xFE(把01–94加上0xA0)。 因爲一級漢字從16區起始,漢字區的「高位字節」的範圍是0xB0–0xF7,「低位字節」的範圍是0xA1–0xFE,佔用的碼位是72*94=6768。其中有5個空位是D7FA–D7FE。


3. GBK字符集&編碼

漢字內碼擴展規範,稱GBK,全名爲《漢字內碼擴展規範(GBK)》1.0版,由中華人民共和國全國信息技術標準化技術委員會1995年12月1日製訂,國家技術監督局標準化司和電子工業部科技與質量監督司1995年12月15日聯合以《技術標函[1995]229號》文件的形式公佈。

GBK的K爲漢語拼音Kuo Zhan(擴展)中「擴」字的聲母。英文全稱Chinese Internal Code Extension Specification。

字符集

GB 2312-80只收錄6763個漢字,有很多漢字,如部分在GB 2312-80推出之後才簡化的漢字(如「囉」),部分人名用字(如中國前總理朱鎔的「鎔」字),臺灣及香港使用的繁體字,日語及朝鮮語漢字等,並未有收錄在內。GBK對GB 2312-80進行擴展, 總計擁有 23940 個碼位,共收入21886個漢字和圖形符號,其中漢字(包括部首和構件)21003 個,圖形符號883 個。

編碼格式

GBK 亦採用雙字節表示,整體編碼範圍爲8140-FEFE,首字節在81-FE 之間,尾字節在40-FE 之間,剔除 xx7F一條線。
這裏寫圖片描述

GBK向下徹底兼容GB2312-80編碼。支持GB2312-80編碼不支持的部分中文姓,中文繁體,日文假名,還包括希臘字母以及俄語字母等字母。不過這種編碼不支持韓國字,也是其在實際使用中與unicode編碼相比欠缺的部分。


4. GB 18030字符集&編碼

GB 18030,全稱:國家標準GB 18030-2005《信息技術 中文編碼字符集》,是中華人民共和國現時最新的內碼字集,是GB 18030-2000《信息技術 信息交換用漢字編碼字符集 基本集的擴充》的修訂版。與GB 2312-1980徹底兼容,與GBK基本兼容;支持GB 13000(93版等同於Unicode 1.1;2010版等同於Unicode 4.0)及Unicode的所有統一漢字,共收錄漢字70,244個。

本規格的第一版是由中華人民共和國信息產業部電子工業標準化研究所起草,由國家質量技術監督局於2000年3月17日發佈。現行版本爲國家質量監督檢驗總局和中國國家標準化管理委員會於2005年11月8日發佈,2006年5月1日實施。

此標準內的單字節編碼部分、雙字節編碼部分,和四字節編碼部分收錄的中日韓統一表意文字擴展A區漢字,爲強制性標準。其餘部分則屬於規模性標準。在中華人民共和國境內全部軟件產品,都須要支持這個同時包含單字節、雙字節和四字節編碼的規格。

GB 18030主要有如下特色:

  • 和UTF-8同樣都採用多字節編碼,每一個字能夠由1個、2個或4個字節組成。
  • 編碼空間龐大,最多可定義161萬個字元。
  • 支持中國國內少數民族的文字,不須要動用造字區。
  • 漢字收錄範圍包含繁體漢字以及日韓漢字。
編碼方式
  • 單字節,其值從0x00到0x7F。
  • 雙字節,第一個字節的值從0x81到0xFE,第二個字節的值從0x40到0xFE(不包括0x7F)。
  • 四字節,第一個字節的值從0x81到0xFE,第二個字節的值從0x30到0x39,第三個字節從0x81到0xFE,第四個字節從0x30到0x39。

5.Unicode字符集&編碼

Unicode(中文:萬國碼國際碼統一碼單一碼)是計算機科學領域裏的一項業界標準。它對世界上大部分的文字系統進行了整理、編碼,使得電腦能夠用更爲簡單的方式來呈現和處理文字。
Unicode伴隨着通用字符集的標準而發展,同時也以書本的形式對外發表。Unicode至今仍在不斷增修,每一個新版本都加入更多新的字符。目前最新的版本爲2016年6月21日公佈的9.0.0,已經收入超過十萬個字符(第十萬個字符在2005年獲採納)。Unicode涵蓋的數據除了視覺上的字形、編碼方法、標準的字符編碼外,還包含了字符特性,如大小寫字母。

Unicode發展由非營利機構統一碼聯盟負責,該機構致力於讓Unicode方案替換既有的字符編碼方案。由於既有的方案每每空間很是有限,亦不適用於多語環境。

Unicode備受承認,並普遍地應用於電腦軟件的國際化與本地化過程。有不少新科技,如可擴展置標語言、Java編程語言以及現代的操做系統,都採用Unicode編碼。

編碼方式

統一碼的編碼方式與ISO 10646的通用字符集概念相對應。目前實際應用的統一碼版本對應於UCS-2,使用16位的編碼空間。也就是每一個字符佔用2個字節。這樣理論上一共最多能夠表示2的16次方(即65536)個字符。基本知足各類語言的使用。實際上當前版本的統一碼並未徹底使用這16位編碼,而是保留了大量空間以做爲特殊使用或未來擴展。

Unicode原編碼佔用兩個字節,在使用ASCII字符時,高位字節的8位始終爲0,這會形成空間的浪費。爲了不這種浪費,Unicode的實現方式不一樣於編碼方式。一個字符的Unicode編碼是肯定的。可是在實際傳輸過程當中,因爲不一樣系統平臺的設計不必定一致,以及出於節省空間的目的,對Unicode編碼的實現方式有所不一樣。Unicode的實現方式稱爲Unicode轉換格式(Unicode Transformation Format,簡稱爲UTF)。
UTF-八、UTF-1六、UTF-32都是將數字轉換到程序數據的編碼方案。


6. UTF-8 編碼

UTF-88-bit Unicode Transformation Format)是一種針對Unicode的可變長度字符編碼,也是一種前綴碼。其編碼中的第一個字節仍與ASCII兼容,這使得原來處理ASCII字符的軟件無須或只須作少部分修改,便可繼續使用。

UTF-8使用一至六個字節爲每一個字符編碼(儘管如此,2003年11月UTF-8被RFC 3629從新規範,只能使用原來Unicode定義的區域,U+0000到U+10FFFF,也就是說最多四個字節):

  1. 128個US-ASCII字符只需一個字節編碼(Unicode範圍由U+0000至U+007F)。
  2. 帶有附加符號的拉丁文、希臘文、西裏爾字母、亞美尼亞語、希伯來文、阿拉伯文、敘利亞文及它拿字母則須要兩個字節編碼(Unicode範圍由U+0080至U+07FF)。
  3. 其餘基本多文種平面(BMP)中的字符(這包含了大部分經常使用字,如大部分的漢字)使用三個字節編碼(Unicode範圍由U+0800至U+FFFF)。
  4. 其餘極少使用的Unicode 輔助平面的字符使用四至六字節編碼(Unicode範圍由U+10000至U+1FFFFF使用四字節,Unicode範圍由U+200000至U+3FFFFFF使用五字節,Unicode範圍由U+4000000至U+7FFFFFFF使用六字節)。

對上述說起的第四種字符而言,UTF-8使用四至六個字節來編碼彷佛太耗費資源了。但UTF-8對全部經常使用的字符均可以用三個字節表示,並且它的另外一種選擇,UTF-16編碼,對前述的第四種字符一樣須要四個字節來編碼,因此要決定UTF-8或UTF-16哪一種編碼比較有效率,還要視所使用的字符的分佈範圍而定。

編碼方式
  • 單字節字符的最高有效比特永遠爲0。
  • 多字節序列中的首個字符組的幾個最高有效比特決定了序列的長度。最高有效位爲110的是2字節序列,而1110的是三字節序列,如此類推。
  • 多字節序列中其他的字節中的首兩個最高有效比特爲10

這裏寫圖片描述


參考連接:
維基百科.字符編碼
維基百科.ASCII
維基百科.GB 2312
維基百科.GBK
維基百科.GB 18030
維基百科.Unicode
維基百科.UTF-8
博客園.字符集和字符編碼

相關文章
相關標籤/搜索