幾種常見字符集與字符編碼

字符集的概念php

  字符(Character)是各類文字和符號的總稱,包括各國家文字、標點符號、圖形符號、數字等。windows

  而字符集(Character set)是多個字符的集合,字符集種類較多,每一個字符集包含的字符個數不一樣。網絡

經常使用字符集ide

  ASCII字符集、GB2312字符集、GBK字符集、 USC-3字符集、Unicode字符集等。ui

字符編碼的概念編碼

  字符編碼(英語:Character encoding)也稱字集碼,是把字符集中的字符編碼爲指定集合中某一對象(例如:比特模式、天然數序列、8位組或者電脈衝),以便文本在計算機中存儲和經過通訊網絡的傳遞。spa

經常使用字符編碼設計

  ASCII編碼、GB2312編碼、GBK編碼、UFT-8編碼等字符編碼。code

注意:不要把字符集和字符編碼二者弄混淆。雖然他們有些同名,好比ASCII有字符集也有ASCII的字符編碼,他們是兩個不一樣的概念。orm

 

下面咱們詳細講解幾種經常使用的字符集和字符編碼

1 ASCII字符集和ASCII編碼

  ASCII(American Standard Code for Information Interchange,美國信息交換標準代碼)是基於拉丁字母的一套電腦編碼系統。它主要用於顯示現代英語,而其擴展版本EASCII則能夠勉強顯示其餘西歐語言。它是現今最通用的單字節編碼系統(可是有被Unicode追上的跡象),並等同於國際標準ISO/IEC 646

ASCII字符集:主要包括控制字符(回車鍵、退格、換行鍵等);可顯示字符(英文大小寫字符、阿拉伯數字和西文符號)。 

ASCII編碼:將ASCII字符集轉換爲計算機能夠接受的數字系統的數的規則。使用7位(bits)表示一個字符,共128字符;可是7位編碼的字符集只能支持128個字符,爲了表示更多的歐洲經常使用字符對ASCII進行了擴展,ASCII擴展字符集使用8位(bits)表示一個字符,共256字符。

  ASCII的最大缺點是隻能顯示26個基本拉丁字母、阿拉伯數目字和英式標點符號,所以只能用於顯示現代美國英語(並且在處理英語當中的外來詞如naïve、café、élite等等時,全部重音符號都不得不去掉,即便這樣作會違反拼寫規則)。而EASCII雖然解決了部份西歐語言的顯示問題,但對更多其餘語言依然無能爲力。所以如今的蘋果電腦已經拋棄ASCII而轉用Unicode。

2 GBXXXX字符集和GBXXXX編碼

  爲了顯示中文,必須設計一套編碼規則用於將漢字轉換爲計算機能夠接受的數字系統的數。

  規定:一個小於127的字符的意義與原來相同,但兩個大於127的字符連在一塊兒時,就表示一個漢字,前面的一個字節(他稱之爲高字節)從0xA1用到 0xF7,後面一個字節(低字節)從0xA1到0xFE,這樣咱們就能夠組合出大約7000多個簡體漢字了。在這些編碼裏,還把數學符號、羅馬希臘的 字母、日文的假名們都編進去了,連在ASCII裏原本就有的數字、標點、字母都通通從新編了兩個字節長的編碼,這就是常說的"全角"字符,而原來在127號如下的那些就叫"半角"字符了。

  上述編碼規則就是GB2312GB2312GB2312-80中國國家標準簡體中文字符集,全稱《信息交換用漢字編碼字符集·基本集》,又稱GB0,由中國國家標準總局發佈,1981年5月1日實施。GB2312編碼通行於中國大陸;新加坡等地也採用此編碼。中國大陸幾乎全部的中文系統和國際化的軟件都支持GB2312。GB2312的出現,基本知足了漢字的計算機處理須要,它所收錄的漢字已經覆蓋中國大陸99.75%的使用頻率。對於人名古漢語等方面出現的罕用字,GB2312不能處理,這致使了後來GBKGB 18030漢字字符集的出現。

3 GIG5字符集和BIG5編碼

  Big5,又稱爲大五碼五大碼,是使用繁體中文(正體中文)社區中最經常使用的電腦漢字字符集標準,共收錄13,060個漢字。中文碼分爲內碼及交換碼兩類,Big5屬中文內碼,知名的中文交換碼有CCCII、CNS11643。Big5雖普及於臺灣、香港與澳門等繁體中文通行區,但長期以來並不是當地的國家標準,而只是業界標準。倚天中文系統、Windows等主要系統的字符集都是以Big5爲基準,但廠商又各自增長不一樣的造字與造字區,派生成多種不一樣版本。2003年,Big5被收錄到CNS11643中文標準交換碼的附錄當中,取得了較正式的地位。這個最新版本被稱爲Big5-2003。

BIG5編碼:Big5碼是一套雙字節字符集,使用了雙八碼存儲方法,以兩個字節來安放一個字。第一個字節稱爲"高位字節",第二個字節稱爲"低位字節"。"高位字節"使用了0x81-0xFE,"低位字節"使用了0x40-0x7E,及0xA1-0xFE。在Big5的分區中:

0x8140-0xA0FE 保留給用戶自定義字符(造字區)
0xA140-0xA3BF 標點符號、希臘字母及特殊符號,包括在0xA259-0xA261,安放了九個計量用漢字:兙兛兞兝兡兣嗧瓩糎。
0xA3C0-0xA3FE 保留。此區沒有開放做造字區用。
0xA440-0xC67E 經常使用漢字,先按筆劃再按部首排序。
0xC6A1-0xC8FE 保留給用戶自定義字符(造字區)
0xC940-0xF9D5 次經常使用漢字,亦是先按筆劃再按部首排序。
0xF9D6-0xFEFE 保留給用戶自定義字符(造字區)

4 Unicode字符集和UTF編碼

Unicode字符集的由來:

  爲了適合當地語言和字符,設計和實現相似GB232/GBK/GB18030/BIG5的編碼方案。這樣各搞一套,在本地使用沒有問題,一旦出如今網絡中,因爲不兼容,互相訪問就出現了亂碼現象。爲了解決這個問題,一個偉大的創想產生了——Unicode。

Unicode編碼系統爲表達任意語言的任意字符而設計。它使用4字節的數字來表達每一個字母、符號,或者表意文字(ideograph)。每一個數字表明惟一的至少在某種語言中使用的符號。(並非全部的數字都用上了,可是總數已經超過了65535,因此2個字節的數字是不夠用的。)被幾種語言共用的字符一般使用相同的數字來編碼,除非存在一個在理的語源學(etymological)理由使不這樣作。

UTF編碼:

UTF-8:UTF-8(8-bit Unicode Transformation Format)是一種針對Unicode的可變長度字符編碼,又稱萬國碼。由Ken Thompson於1992年建立。如今已經標準化爲RFC 3629。UTF-8用1到6個字節編碼UNICODE字符。用在網頁上能夠同一頁面顯示中文簡體繁體及其它語言(如英文,日文,韓文)。

UTF-16:UTF-16是Unicode字符編碼五層次模型的第三層:字符編碼表(Character Encoding Form,也稱爲 "storage format")的一種實現方式。即把Unicode字符集的抽象碼位映射爲16位長的整數(即碼元)的序列,用於數據存儲或傳遞。Unicode字符的碼位,須要1個或者2個16位長的碼元來表示,所以這是一個變長表示。

UTF-32:UTF-32 (或 UCS-4)是一種將Unicode字符編碼的協定,對每個Unicode碼位使用剛好32位元。其它的Unicode transformation formats則使用不定長度編碼。由於UTF-32對每一個字符都使用4字節,就空間而言,是很是沒有效率的。特別地,非基本多文種平面的字符在大部分文件中一般很罕見,以至於它們一般被認爲不存在佔用空間大小的討論,使得UTF-32一般會是其它編碼的二到四倍。雖然每個碼位使用固定長定的字節看似方便,它並不如其它Unicode編碼使用得普遍。

5 MBCS編碼

  爲了擴充ASCII編碼,以用於顯示本國的語言,不一樣的國家和地區制定了不一樣的標準,由此產生了 GB2312, BIG5, JIS 等各自的編碼標準。這些使用 2 個字節來表明一個字符的各類漢字延伸編碼方式,稱爲 ANSI 編碼,又稱爲"MBCS(Muilti-Bytes Charecter Set,多字節字符集)"。在簡體中文系統下,ANSI 編碼表明 GB2312 編碼。因此在中文 windows下要轉碼成gb2312,gbk只須要把文本保存爲ANSI 編碼便可。

注:其中每一個語言下的ANSI編碼,都有一套一對一的編碼轉換器,Unicode變成全部編碼轉換的中間介質。全部的編碼都有一個轉換器能夠轉換到Unicode,而Unicode也能夠轉換到其餘全部的編碼。

6 base64編碼

  有的電子郵件系統(好比國外信箱)不支持非英文字母(好比漢字)傳輸,這是歷史緣由形成的(認爲只有美國會使用電子郵件?)。由於一個英文字母使用ASCII編碼來存儲,佔存儲器的1個字節(8位),實際上只用了7位2進制來存儲,第一位並無使用,設置爲0,因此,這樣的系統認爲凡是第一位是1的字節都是錯誤的。而有的編碼方案(好比GB2312)不但使用多個字節編碼一個字符,而且第一位常常是1,因而郵件系統就把1換成0,這樣收到郵件的人就會發現郵件亂碼。
  爲了能讓郵件系統正常的收發信件,就須要把由其餘編碼存儲的符號轉換成ASCII碼來傳輸。好比,在一端發送GB2312編碼->根據Base64規則->轉換成ASCII碼,接收端收到ASCII碼->根據Base64規則->還原到GB2312編碼。
相關文章
相關標籤/搜索