ASCII碼是7位編碼,字符在計(jì)算機(jī)中以其ASCII碼方式表示,其長(zhǎng)度為1個(gè)字節(jié), 有符號(hào)字符型數(shù)。編碼范圍是0x00-0x7F(0~127)。ASCII字符集包括英文字母、阿拉伯?dāng)?shù)字和標(biāo)點(diǎn)符號(hào)等字符。其中0x00-0x20和0x7F共33個(gè)控制字符。
ASCII 十六進(jìn)制 控制字 代碼含義
00 00 NUL 空
01 01 SOH 標(biāo)題開(kāi)始
02 02 STX 正文開(kāi)始
03 03 ETX 正文結(jié)束
04 04 EOT 傳輸結(jié)否
05 05 ENQ 詢問(wèn)
06 06 ACK 確認(rèn)
07 07 BEL 響鈴
08 08 BS 退格
09 09 HT 橫向列表
10 0A LF 換行
11 0B VT 縱向列表
12 0C FF 換頁(yè)
13 0D CR 回車
14 0E SO 換檔(Shift-Out)
15 0F SI 換檔(Shift-In)
16 10 DLE 數(shù)據(jù)鏈擴(kuò)展
17 11 DC1 設(shè)備控制1
18 12 DC2 設(shè)備控制2
19 13 DC3 設(shè)備控制3
20 14 DC4 設(shè)備控制4
21 15 NAK 不確認(rèn)
22 16 SYN 同步字符
23 17 ETB 傳輸塊結(jié)否
24 18 CAN 作廢
25 19 EM 介質(zhì)結(jié)束
26 1A SUB 置換
27 1B ESC 擴(kuò)展
28 1C FS 文件分隔符
29 1D GS 組分隔符
30 1E RS 記錄分隔符
31 1F US 單位分隔符
ASCII碼對(duì)照表
ASCII碼 |
鍵盤(pán) |
ASCII 碼 |
鍵盤(pán) |
ASCII 碼 |
鍵盤(pán) |
ASCII 碼 |
鍵盤(pán) |
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碼的系統(tǒng)會(huì)忽略每個(gè)字節(jié)的最高位,只認(rèn)為低7位是有效位。HZ字符編碼就是早期為了在只支持7位ASCII系統(tǒng)中傳輸中文而設(shè)計(jì)的編碼。早期很多郵件系統(tǒng)也只支持ASCII編碼,為了傳輸中文郵件必須使用BASE64或者其他編碼方式。
GB2312字符集編碼GB2312 是漢字字符集和編碼的代號(hào),中文全稱為“信息交換用漢字編碼字符集”,由中華人民共和國(guó)國(guó)家標(biāo)準(zhǔn)總局發(fā)布,一九八一年五月一日實(shí)施。GB 是“國(guó)標(biāo)” 二字的漢語(yǔ)拼音縮寫(xiě)。
GB2312 字符集 (character set) 只收錄簡(jiǎn)化字漢字,以及一般常用字母和符號(hào),主要通行于中國(guó)大陸地區(qū)和新加坡等地。GB2312 共收錄有
7445 個(gè)字符,其中簡(jiǎn)化漢字
6763 個(gè),字母和符號(hào) 682 個(gè)。
GB2312 將所收錄的字符分為 94 個(gè)區(qū),編號(hào)為 01 區(qū)至 94 區(qū);每個(gè)區(qū)收錄 94 個(gè)字符,編號(hào)為 01 位至 94 位。GB2312 的每一個(gè)字符都由與其唯一對(duì)應(yīng)的區(qū)號(hào)和位號(hào)所確定。例如:漢字“啊”,編號(hào)為 16 區(qū) 01 位。
GB2312 字符集的區(qū)位分布表:
區(qū)號(hào) 字?jǐn)?shù) 字符類別
01 94 一般符號(hào)
02 72 順序號(hào)碼
03 94 拉丁字母
04 83 日文假名
05 86 Katakana
06 48 希臘字母
07 66 俄文字母
08 63 漢語(yǔ)拼音符號(hào)
09 76 圖形符號(hào)
10-15 備用區(qū)
16-55 3755 一級(jí)漢字,以拼音為序
56-87 3008 二級(jí)漢字,以筆劃為序
88-94 備用區(qū)
這本手冊(cè)列出了 GB2312 的全部字符和它們的區(qū)位號(hào)。
GB2312 編碼
GB2312 原始編碼 (encoding) 是對(duì)所收錄的每個(gè)字符都用兩個(gè)字節(jié) (byte) 表示。第一字節(jié)為“高字節(jié)”,由字符的區(qū)號(hào)值加上 32 而形成;第二字節(jié)為“低字節(jié)”,由字符的位號(hào)值加上 32 而形成。例如:漢字“啊”,編號(hào)為 16 區(qū) 01 位。它的高字節(jié)為 16 + 32 = 48 (0x30),低字節(jié)為 01 + 32 = 33 (0x21),合并而成的編碼為 0x3021。
在區(qū)位號(hào)值上加 32 的原因大慨是為了避開(kāi)低值字節(jié)區(qū)間。
由于 GB2312 原始編碼與 ASCII 編碼的字節(jié)有重疊,現(xiàn)在通行的 GB2312 編碼是在原始編碼的兩個(gè)字節(jié)上各加 128 修改而形成。例如:漢字“啊”,編號(hào)為 16 區(qū) 01 位。它的原始編碼為 0x3021,通行編碼為 0xB0A1。
如果不另加說(shuō)明,GB2312 常指這種修改過(guò)的編碼。
GB2312的編碼范圍是0xA1A1-0x7E7E,去掉未定義的區(qū)域之后可以理解為實(shí)際編碼范圍是0xA1A1-0xF7FE。
上面這句有誤,應(yīng)該說(shuō)GB2312的每一個(gè)漢字由兩個(gè)字節(jié)構(gòu)成,其中每一個(gè)字節(jié)的范圍都在0xA1 ~0xFE,正好每一個(gè)字節(jié)都有94個(gè)編碼范圍,與區(qū)位碼個(gè)數(shù)完全對(duì)應(yīng)。
EUC-CN可以理解為GB2312的別名,和GB2312完全相同。
區(qū)位碼更應(yīng)該認(rèn)為是字符集的定義,定義了所收錄的字符和字符位置,而GB2312及EUC-CN是實(shí)際計(jì)算機(jī)環(huán)境中支持這種字符集的編碼。HZ和 ISO-2022-CN是對(duì)應(yīng)區(qū)位碼字符集的另外兩種編碼,都是用7位編碼空間來(lái)支持漢字。區(qū)位碼和GB2312編碼的關(guān)系有點(diǎn)像 Unicode和UTF-8。
GBK字符集編碼
GBK 編碼是GB2312編碼的超集,向下完全兼容GB2312,同時(shí)GBK收錄了Unicode基本多文種平面中的所有CJK漢字。同 GB2312一樣,GBK也支持希臘字母、日文假名字母、俄語(yǔ)字母等字符,但不支持韓語(yǔ)中的表音字符(非漢字字符)。GBK還收錄了GB2312不包含的 漢字部首符號(hào)、豎排標(biāo)點(diǎn)符號(hào)等字符。
GBK的整體編碼范圍是為:高字節(jié)范圍是0×81-0xFE,低字節(jié)范圍是0x40-7E和0x80-0xFE,不包括低字節(jié)是0×7F的組合。
低字節(jié)是0x40-0x7E的GBK字符有一定特殊性,因?yàn)檫@些字符占用了ASCII碼的位置,這樣會(huì)給一些系統(tǒng)帶來(lái)麻煩。
有些系統(tǒng)中用0x40-0x7E中的字符(如“|”)做特殊符號(hào),在定位這些符號(hào)時(shí)又沒(méi)有判斷這些符號(hào)是不是屬于某個(gè) GBK字符的低字節(jié),這樣就會(huì)造成錯(cuò)誤判斷。在支持GB2312的環(huán)境下就不存在這個(gè)問(wèn)題。需要注意的是支持GBK的環(huán)境中小于0x80的某個(gè)字節(jié)未必就 是ASCII符號(hào);另外就是最好選用小于0×40的ASCII符號(hào)做一些特殊符號(hào),這樣就可以快速定位,且不用擔(dān)心是某個(gè)漢字的另一半。Big5編碼中也 存在相應(yīng)問(wèn)題。
CP936和GBK的有些許差別,絕大多數(shù)情況下可以把CP936當(dāng)作GBK的別名。
GB18030字符集編碼
GB18030編碼向下兼容GBK和GB2312,兼容的含義是不僅字符兼容,而且相同字符的編碼也相同。GB18030收錄了所有Unicode3.1中的字符,包括中國(guó)少數(shù)民族字符,GBK不支持的韓文字符等等,也可以說(shuō)是世界大多民族的文字符號(hào)都被收錄在內(nèi)。
GBK和GB2312都是雙字節(jié)等寬編碼,如果算上和ASCII兼容所支持的單字節(jié),也可以理解為是單字節(jié)和雙字節(jié)混合的變長(zhǎng)編碼。GB18030編碼是變長(zhǎng)編碼,有單字節(jié)、雙字節(jié)和四字節(jié)三種方式。
GB18030 的單字節(jié)編碼范圍是0x00-0x7F,完全等同與ASCII;雙字節(jié)編碼的范圍和GBK相同,高字節(jié)是0x81-0xFE,低字節(jié)的編碼范圍是0x40 -0x7E和0x80-FE;四字節(jié)編碼中第一、三字節(jié)的編碼范圍是0x81-0xFE,二、四字節(jié)是0x30-0x39。
Windows 中CP936代碼頁(yè)使用0x80來(lái)表示歐元符號(hào),而在GB18030編碼中沒(méi)有使用0x80編碼位,用其他位置來(lái)表示歐元符號(hào)。這可以理解為是 GB18030向下兼容性上的一點(diǎn)小問(wèn)題;也可以理解為0x80是CP936對(duì)GBK的擴(kuò)展,而GB18030只是和GBK兼容良好。
unicode字符集編碼
每一種語(yǔ)言的不同的編碼頁(yè),增加了那些需要支持不同語(yǔ)言的軟件的復(fù)雜度。因而人們制定了一個(gè)世界標(biāo)準(zhǔn),叫做unicode。unicode為每個(gè)字符 提供 了唯一的特定數(shù)值,不論在什么平臺(tái)上、不論在什么軟件中,也不論什么語(yǔ)言。也就是說(shuō),它世界上使用的所有字符都列出來(lái),并給每一個(gè)字符一個(gè)唯一特定數(shù)值。
Unicode的最初目標(biāo),是用1個(gè)16位的編碼來(lái)為超過(guò)65000字符提供映射。但這還不夠,它不能覆蓋全部歷史上的文字,也不能解決傳輸?shù)膯?wèn)題 (implantation head-ache's),尤其在那些基于網(wǎng)絡(luò)的應(yīng)用中。已有的軟件必須做大量的工作來(lái)程序16位的數(shù)據(jù)。
因 此,Unicode用一些基本的保留字符制定了三套編碼方式。它們分別是UTF-8,UTF-16和UTF-32。正如名字所示,在UTF-8中,字符是 以8位序列來(lái)編碼的,用一個(gè)或幾個(gè)字節(jié)來(lái)表示一個(gè)字符。這種方式的最大好處,是UTF-8保留了ASCII字符的編碼做為它的一部分,例如,在UTF-8 和ASCII中,“A”的編碼都是0x41.
UTF-16和UTF-32分別是Unicode的16位和32位編碼方式。考慮到最初的目的,通常說(shuō)的Unicode就是指UTF-16。在討論Unicode時(shí),搞清楚哪種編碼方式非常重要。
UTF-8字符集編碼
Unicode Transformation Format-8bit,允許含BOM,但通常不含BOM。是用以解決國(guó)際上字符的一種多字節(jié)編碼,它對(duì)英文使用8位(即一個(gè)字節(jié)),中文使用24為(三 個(gè)字節(jié))來(lái)編碼。UTF-8包含全世界所有國(guó)家需要用到的字符,是國(guó)際編碼,通用性強(qiáng)。UTF-8編碼的文字可以在各國(guó)支持UTF8字符集的瀏覽器上顯 示。如,如果是UTF8編碼,則在外國(guó)人的英文IE上也能顯示中文,他們無(wú)需下載IE的中文語(yǔ)言支持包。
GBK的文字編碼是用雙字節(jié)來(lái)表示的,即不論中、英文字符均使用雙字節(jié)來(lái)表示,為了區(qū)分中文,將其最高位都設(shè)定成1。GBK包含全部中文字符,是國(guó)家編碼,通用性比UTF8差,不過(guò)UTF8占用的數(shù)據(jù)庫(kù)比GBD大。
GBK、GB2312等與UTF8之間都必須通過(guò)Unicode編碼才能相互轉(zhuǎn)換:
GBK、GB2312--Unicode--UTF8
UTF8--Unicode--GBK、GB2312
對(duì)于一個(gè)網(wǎng)站、論壇來(lái)說(shuō),如果英文字符較多,則建議使用UTF-8節(jié)省空間。不過(guò)現(xiàn)在很多論壇的插件一般只支持GBK。