ASCII 、GB2312、GBK、GB18030、unicode、UTF-8字符集

ASCII字符集編碼

ASCII碼是7位編碼
,字符在計算機中以其ASCII碼方式表示,其長度爲1個字節, 有符號字符型數。編碼範圍是0x00-0x7F(0~127)。ASCII字符集包括英文字母、阿拉伯數字和標點符號等字符。其中0x00-0x20和0x7F共33個控制字符。

ASCII 十六進制 控制字 代碼含義 
00           00            NUL      空 
01           01            SOH      標題開始 
02           02            STX      正文開始 
03           03            ETX      正文結束 
04           04           EOT        傳輸結否 
05           05           ENQ       詢問 
06           06           ACK       確認 
07           07           BEL        響鈴 
08           08           BS         退格 
09           09           HT         橫向列表 
10           0A           LF         換行 
11          0B            VT         縱向列表 
12          0C           FF            換頁 
13          0D           CR           回車 
14          0E           SO            換檔(Shift-Out) 
15          0F           SI            換檔(Shift-In) 
16          10           DLE        數據鏈擴展 
17          11           DC1        設備控制1 
18          12           DC2        設備控制2 
19          13           DC3        設備控制3 
20           14           DC4        設備控制4 
21          15           NAK        不確認 
22          16           SYN        同步字符 
23          17           ETB        傳輸塊結否 
24          18           CAN        作廢 
25          19           EM         介質結束 
26          1A           SUB        置換 
27          1B           ESC        擴展 
28          1C           FS            文件分隔符 
29          1D           GS         組分隔符 
30          1E           RS         記錄分隔符 
31          1F           US         單位分隔符

ASCII碼對照表

ASCII碼 鍵盤 ASCII 碼 鍵盤 ASCII 碼 鍵盤 ASCII 碼 鍵盤
27 ESC 32 SPACE 33 ! 34 "
35 # 36 $ 37 % 38 &
39 ' 40 ( 41 ) 42 *
43 + 44 ' 45 - 46 .
47 / 48 0 49 1 50 2
51 3 52 4 53 5 54 6
55 7 56 8 57 9 58 :
59 ; 60 < 61 = 62 >
63 ? 64 @ 65 A 66 B
67 C 68 D 69 E 70 F
71 G 72 H 73 I 74 J
75 K 76 L 77 M 78 N
79 O 80 P 81 Q 82 R
83 S 84 T 85 U 86 V
87 W 88 X 89 Y 90 Z
91 [ 92 / 93 ] 94 ^
95 _ 96 ` 97 a 98 b
99 c 100 d 101 e 102 f
103 g 104 h 105 i 106 j
107 k 108 l 109 m 110 n
111 o 112 p 113 q 114 r
115 s 116 t 117 u 118 v
119 w 120 x 121 y 122 z
123 { 124 | 125 } 126 ~


只支持ASCII碼的系統會忽略每個字節的最高位,只認爲低7位是有效位。HZ字符編碼就是早期爲了在只支持7位ASCII系統中傳輸中文而設計的編碼。早期很多郵件系統也只支持ASCII編碼,爲了傳輸中文郵件必須使用BASE64或者其他編碼方式。


GB2312字符集編碼


GB2312 是漢字字符集和編碼的代號,中文全稱爲“信息交換用漢字編碼字符集”,由中華人民共和國國家標準總局發佈,一九八一年五月一日實施。GB 是“國標” 二字的漢語拼音縮寫。

GB2312 字符集 (character set) 只收錄簡化字漢字,以及一般常用字母和符號,主要通行於中國大陸地區和新加坡等地。GB2312 共收錄有 7445 個字符,其中簡化漢字 6763 個,字母和符號 682 個。

GB2312 將所收錄的字符分爲 94 個區,編號爲 01 區至 94 區;每個區收錄 94 個字符,編號爲 01 位至 94 位。GB2312 的每一個字符都由與其唯一對應的區號和位號所確定。例如:漢字“啊”,編號爲 16 區 01 位。

GB2312 字符集的區位分佈表:

區號    字數    字符類別
01      94    一般符號
02      72    順序號碼
03      94    拉丁字母
04      83    日文假名
05      86    Katakana
06      48    希臘字母
07      66    俄文字母
08      63    漢語拼音符號
09      76    圖形符號
10-15            備用區
16-55    3755    一級漢字,以拼音爲序
56-87    3008    二級漢字,以筆劃爲序
88-94            備用區

這本手冊列出了 GB2312 的全部字符和它們的區位號。

GB2312 編碼

GB2312 原始編碼 (encoding) 是對所收錄的每個字符都用兩個字節 (byte) 表示。第一字節爲“高字節”,由字符的區號值加上 32 而形成;第二字節爲“低字節”,由字符的位號值加上 32 而形成。例如:漢字“啊”,編號爲 16 區 01 位。它的高字節爲 16 + 32 = 48 (0x30),低字節爲 01 + 32 = 33 (0x21),合併而成的編碼爲 0x3021。

在區位號值上加 32 的原因大慨是爲了避開低值字節區間。

由於 GB2312 原始編碼與 ASCII 編碼的字節有重疊,現在通行的 GB2312 編碼是在原始編碼的兩個字節上各加 128 修改而形成。例如:漢字“啊”,編號爲 16 區 01 位。它的原始編碼爲 0x3021,通行編碼爲 0xB0A1。

如果不另加說明,GB2312 常指這種修改過的編碼。

GB2312的編碼範圍是0xA1A1-0x7E7E,去掉未定義的區域之後可以理解爲實際編碼範圍是0xA1A1-0xF7FE。

上面這句有誤,應該說GB2312的每一個漢字由兩個字節構成,其中每一個字節的範圍都在0xA1 ~0xFE,正好每一個字節都有94個編碼範圍,與區位碼個數完全對應。

EUC-CN可以理解爲GB2312的別名,和GB2312完全相同。

區位碼更應該認爲是字符集的定義,定義了所收錄的字符和字符位置,而GB2312及EUC-CN是實際計算機環境中支持這種字符集的編碼。HZ和 ISO-2022-CN是對應區位碼字符集的另外兩種編碼,都是用7位編碼空間來支持漢字。區位碼和GB2312編碼的關係有點像 Unicode和UTF-8。

GBK字符集編碼

GBK 編碼是GB2312編碼的超集,向下完全兼容GB2312,同時GBK收錄了Unicode基本多文種平面中的所有CJK漢字。同 GB2312一樣,GBK也支持希臘字母、日文假名字母、俄語字母等字符,但不支持韓語中的表音字符(非漢字字符)。GBK還收錄了GB2312不包含的漢字部首符號、豎排標點符號等字符。

GBK的整體編碼範圍是爲高字節範圍是0×81-0xFE,低字節範圍是0x40-7E和0x80-0xFE,不包括低字節是0×7F的組合。

低字節是0x40-0x7E的GBK字符有一定特殊性,因爲這些字符佔用了ASCII碼的位置,這樣會給一些系統帶來麻煩。

有些系統中用0x40-0x7E中的字符(如“|”)做特殊符號,在定位這些符號時又沒有判斷這些符號是不是屬於某個 GBK字符的低字節,這樣就會造成錯誤判斷。在支持GB2312的環境下就不存在這個問題。需要注意的是支持GBK的環境中小於0x80的某個字節未必就是ASCII符號;另外就是最好選用小於0×40的ASCII符號做一些特殊符號,這樣就可以快速定位,且不用擔心是某個漢字的另一半。Big5編碼中也存在相應問題。
CP936和GBK的有些許差別,絕大多數情況下可以把CP936當作GBK的別名。

GB18030字符集編碼

GB18030編碼向下兼容GBK和GB2312,兼容的含義是不僅字符兼容,而且相同字符的編碼也相同。GB18030收錄了所有Unicode3.1中的字符,包括中國少數民族字符,GBK不支持的韓文字符等等,也可以說是世界大多民族的文字符號都被收錄在內。

GBK和GB2312都是雙字節等寬編碼,如果算上和ASCII兼容所支持的單字節,也可以理解爲是單字節和雙字節混合的變長編碼。GB18030編碼是變長編碼,有單字節、雙字節和四字節三種方式。

GB18030 的單字節編碼範圍是0x00-0x7F,完全等同與ASCII;雙字節編碼的範圍和GBK相同,高字節是0x81-0xFE,低字節的編碼範圍是0x40 -0x7E和0x80-FE;四字節編碼中第一、三字節的編碼範圍是0x81-0xFE,二、四字節是0x30-0x39。

Windows 中CP936代碼頁使用0x80來表示歐元符號,而在GB18030編碼中沒有使用0x80編碼位,用其他位置來表示歐元符號。這可以理解爲是 GB18030向下兼容性上的一點小問題;也可以理解爲0x80是CP936對GBK的擴展,而GB18030只是和GBK兼容良好。

unicode字符集編碼

   每一種語言的不同的編碼頁,增加了那些需要支持不同語言的軟件的複雜度。因而人們制定了一個世界標準,叫做unicode。unicode爲每個字符提供了唯一的特定數值,不論在什麼平臺上、不論在什麼軟件中,也不論什麼語言。也就是說,它世界上使用的所有字符都列出來,並給每一個字符一個唯一特定數值。

Unicode的最初目標,是用1個16位的編碼來爲超過65000字符提供映射。但這還不夠,它不能覆蓋全部歷史上的文字,也不能解決傳輸的問題 (implantation head-ache's),尤其在那些基於網絡的應用中。已有的軟件必須做大量的工作來程序16位的數據。
因此,Unicode用一些基本的保留字符制定了三套編碼方式。它們分別是UTF-8,UTF-16和UTF-32。正如名字所示,在UTF-8中,字符是以8位序列來編碼的,用一個或幾個字節來表示一個字符。這種方式的最大好處,是UTF-8保留了ASCII字符的編碼做爲它的一部分,例如,在UTF-8 和ASCII中,“A”的編碼都是0x41.

UTF-16和UTF-32分別是Unicode的16位和32位編碼方式。考慮到最初的目的,通常說的Unicode就是指UTF-16。在討論Unicode時,搞清楚哪種編碼方式非常重要。

UTF-8字符集編碼

Unicode Transformation Format-8bit,允許含BOM,但通常不含BOM。是用以解決國際上字符的一種多字節編碼,它對英文使用8位(即一個字節),中文使用24爲(三個字節)來編碼。UTF-8包含全世界所有國家需要用到的字符,是國際編碼,通用性強。UTF-8編碼的文字可以在各國支持UTF8字符集的瀏覽器上顯示。如,如果是UTF8編碼,則在外國人的英文IE上也能顯示中文,他們無需下載IE的中文語言支持包。

GBK的文字編碼是用雙字節來表示的,即不論中、英文字符均使用雙字節來表示,爲了區分中文,將其最高位都設定成1。GBK包含全部中文字符,是國家編碼,通用性比UTF8差,不過UTF8佔用的數據庫比GBD大。

GBK、GB2312等與UTF8之間都必須通過Unicode編碼才能相互轉換

GBK、GB2312--Unicode--UTF8

UTF8--Unicode--GBK、GB2312

對於一個網站、論壇來說,如果英文字符較多,則建議使用UTF-8節省空間。不過現在很多論壇的插件一般只支持GBK。

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