天天看點

ASCII 、GB2312、GBK、GB18030、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。

ASCII碼對照表

下表列出了字元集中的 0 - 127。

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

下表列出了字元集中的 128 - 255。

代碼 字元 代碼 字元 代碼 字元 代碼 字元
128 160 [空格] 192 À 224 à
129 161 ¡ 193 Á 225 á
130 162 ¢ 194 Â 226 â
131 ƒ 163 £ 195 Ã 227 ã
132 164 ¤ 196 Ä 228 ä
133 165 ¥ 197 Å 229 å
134 166 ¦ 198 Æ 230 æ
135 167 § 199 Ç 231 ç
136 ˆ 168 ¨ 200 È 231 ç
137 169 © 201 É 232 è
138 Š 170 ª 202 Ê 233 é
139 171 « 203 Ë 234 ê
140 Œ 172 ¬ 204 Ì 235 ë
141 173 ­ 205 Í 236 ì
142 Ž 174 ® 206 Î 237 í
143 175 ¯ 207 Ï 238 î
144 176 ° 208 Ð 239 ï
145 177 ± 209 Ñ 240 ð
146 178 ² 210 Ò 241 ñ
147 179 ³ 211 Ó 242 ò
148 180 ´ 212 Ô 243 ó
149 181 µ 213 Õ 244 ô
150 182 214 Ö 245 õ
151 183 · 215 × 246 ö
152 ˜ 184 ¸ 216 Ø 247 ÷
153 185 ¹ 217 Ù 248 ø
154 š 186 º 218 Ú 249 ù
155 187 » 219 Û 250 ú
156 œ 188 ¼ 220 Ü 251 û
157 189 ½ 221 Ý 252 ü
158 ž 190 ¾ 222 Þ 253 ý
159 Ÿ 191 ¿ 223 ß 254 þ

** 數值 8、9、10 和 13 可以分别轉換為倒退符、制表符、換行符和回車符。這些字元都沒有圖形表示,但是對于不同的應用程式,這些字元可能會影響文本的顯示效果。

"空" 表示在目前平台上不支援的字元。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/13771794/viewspace-664635/,如需轉載,請注明出處,否則将追究法律責任。

轉載于:http://blog.itpub.net/13771794/viewspace-664635/