ASCII编码
字符集为每个字符分配一个唯一的编号,类似于学生的学号,通过编号就能够找到对应的字符。可以将字符集理解成一个很大的表格,它列出了所有字符和二进制的对应关系,计算机显示文字或者存储文字,就是一个查表的过程。
在计算机逐步发展的过程中,先后出现了几十种甚至上百种字符集,有些还在使用,有些已经淹没在了历史的长河中,本节我们要讲解的是一种专门针对英文的字符集——ASCII编码。
拉丁字母
在正式介绍ASCII编码之前,我们先来说说什么是拉丁字母。拉丁字母也叫罗马字母,它源自希腊字母,是当今世界上使用最广的字母系统。基本的拉丁字母就是我们经常见到的ABCD等26个英文字母。
拉丁字母、阿拉伯字母、斯拉夫字母(西里尔字母)被称为世界三大字母体系。
拉丁字母原先是欧洲人使用的,后来由于欧洲殖民主义,导致这套字母体系在全球范围内开始流行,美洲、非洲、澳洲、亚洲都没有逃过西方文化的影响。中国也是,我们现在使用的拼音其实就是拉丁字母,是不折不扣的舶来品。后来,很多国家对26个基本的拉丁字母进行了扩展,以适应本地的语言文化。最常见的扩展方式就是加上变音符号,例如汉语拼音中的ü,就是在u的基础上加上两个小点演化而来;再如,áà就是在a的上面标上音调。总起来说:
- 基本拉丁字母就是26个英文字母;
- 扩展拉丁字母就是在基本的26个英文字母的基础上添加变音符号、横线、斜线等演化而来,每个国家都不一样。
ASCII 编码
计算机是美国人发明的,他们首先要考虑的问题是,如何将二进制和英文字母(也就是拉丁文)对应起来。当时,各个厂家或者公司都有自己的做法,编码规则并不统一,这给不同计算机之间的数据交换带来不小的麻烦。但是相对来说,能够得到普遍认可的有IBM发明的EBCDIC和此处要谈的ASCII。
我们先说ASCII。ASCII是“American Standard Code for Information Interchange”的缩写,翻译过来是“美国信息交换标准代码”。看这个名字就知道,这套编码是美国人给自己设计的,他们并没有考虑欧洲那些扩展的拉丁字母,也没有考虑韩语、日语,中华几万个汉字更是不可能被重视。但这也无可厚非,美国人自己发明的计算机,当然要先解决自己的问题
ASCII的标准版本于1967年第一次发布,最后一次更新则是在1986年,迄今为止共收录了128个字符,包含了基本的拉丁字母(英文字母)、阿拉伯数字(也就是1234567890)、标点符号(,.!等)、特殊符号(@#$%^&等)以及一些具有控制功能的字符(往往不会显示出来)。
在ASCII编码中,大写字母、小写字母和阿拉伯数字都是连续分布的(见下表),这给程序设计带来了很大的方便。例如要判断一个字符是否是大写字母,就可以判断该字符的ASCII编码值是否在65~90的范围内。
EBCDIC编码正好相反,它的英文字母不是连续排列的,中间出现了多次断续,给编程带来了一些困难。现在连IBM自己也不使用EBCDIC了,转而使用更加优秀的ASCII。
ASCII编码已经成了计算机的通用标准,没有人再使用EBCDIC编码了,它已经消失在历史的长河中了。
ASCII 编码一览表
标准ASCII编码共收录了128个字符,其中包含了33个控制字符(具有某些特殊功能但是无法显示的字符)和95个可显示字符。
ASCII 编码一览表(淡黄色背景为控制字符,白色背景为可显示字符) | ||||
二进制 |
十进制 |
十六进制 |
字符/缩写 |
解释 |
00000000 |
0 |
00 |
NUL (NULL) |
空字符 |
00000001 |
1 |
01 |
SOH (Start Of Headling) |
标题开始 |
00000010 |
2 |
02 |
STX (Start Of Text) |
正文开始 |
00000011 |
3 |
03 |
ETX (End Of Text) |
正文结束 |
00000100 |
4 |
04 |
EOT (End Of Transmission) |
传输结束 |
00000101 |
5 |
05 |
ENQ (Enquiry) |
请求 |
00000110 |
6 |
06 |
ACK (Acknowledge) |
回应/响应/收到通知 |
00000111 |
7 |
07 |
BEL (Bell) |
响铃 |
00001000 |
8 |
08 |
BS (Backspace) |
退格 |
00001001 |
9 |
09 |
HT (Horizontal Tab) |
水平制表符 |
00001010 |
10 |
0A |
LF/NL(Line Feed/New Line) |
换行键 |
00001011 |
11 |
0B |
VT (Vertical Tab) |
垂直制表符 |
00001100 |
12 |
0C |
FF/NP (Form Feed/New Page) |
换页键 |
00001101 |
13 |
0D |
CR (Carriage Return) |
回车键 |
00001110 |
14 |
0E |
SO (Shift Out) |
不用切换 |
00001111 |
15 |
0F |
SI (Shift In) |
启用切换 |
00010000 |
16 |
10 |
DLE (Data Link Escape) |
数据链路转义 |
00010001 |
17 |
11 |
DC1/XON (Device Control 1/Transmission On) |
设备控制1/传输开始 |
00010010 |
18 |
12 |
DC2 (Device Control 2) |
设备控制2 |
00010011 |
19 |
13 |
DC3/XOFF (Device Control 3/Transmission Off) |
设备控制3/传输中断 |
00010100 |
20 |
14 |
DC4 (Device Control 4) |
设备控制4 |
00010101 |
21 |
15 |
NAK (Negative Acknowledge) |
无响应/非正常响应/拒绝接收 |
00010110 |
22 |
16 |
SYN (Synchronous Idle) |
同步空闲 |
00010111 |
23 |
17 |
ETB (End of Transmission Block) |
传输块结束/块传输终止 |
00011000 |
24 |
18 |
CAN (Cancel) |
取消 |
00011001 |
25 |
19 |
EM (End of Medium) |
已到介质末端/介质存储已满/介质中断 |
00011010 |
26 |
1A |
SUB (Substitute) |
替补/替换 |
00011011 |
27 |
1B |
ESC (Escape) |
逃离/取消 |
00011100 |
28 |
1C |
FS (File Separator) |
文件分割符 |
00011101 |
29 |
1D |
GS (Group Separator) |
组分隔符/分组符 |
00011110 |
30 |
1E |
RS (Record Separator) |
记录分离符 |
00011111 |
31 |
1F |
US (Unit Separator) |
单元分隔符 |
00100000 |
32 |
20 |
(Space) |
空格 |
00100001 |
33 |
21 |
! | |
00100010 |
34 |
22 |
" | |
00100011 |
35 |
23 |
# | |
00100100 |
36 |
24 |
$ | |
00100101 |
37 |
25 |
% | |
00100110 |
38 |
26 |
& | |
00100111 |
39 |
27 |
' | |
00101000 |
40 |
28 |
( | |
00101001 |
41 |
29 |
) | |
00101010 |
42 |
2A |
* | |
00101011 |
43 |
2B |
+ | |
00101100 |
44 |
2C |
, | |
00101101 |
45 |
2D |
- | |
00101110 |
46 |
2E |
. | |
00101111 |
47 |
2F |
/ | |
00110000 |
48 |
30 |
0 | |
00110001 |
49 |
31 |
1 | |
00110010 |
50 |
32 |
2 | |
00110011 |
51 |
33 |
3 | |
00110100 |
52 |
34 |
4 | |
00110101 |
53 |
35 |
5 | |
00110110 |
54 |
36 |
6 | |
00110111 |
55 |
37 |
7 | |
00111000 |
56 |
38 |
8 | |
00111001 |
57 |
39 |
9 | |
00111010 |
58 |
3A |
: | |
00111011 |
59 |
3B |
; | |
00111100 |
60 |
3C |
< | |
00111101 |
61 |
3D |
= | |
00111110 |
62 |
3E |
> | |
00111111 |
63 |
3F |
? | |
01000000 |
64 |
40 |
@ | |
01000001 |
65 |
41 |
A | |
01000010 |
66 |
42 |
B | |
01000011 |
67 |
43 |
C | |
01000100 |
68 |
44 |
D | |
01000101 |
69 |
45 |
E | |
01000110 |
70 |
46 |
F | |
01000111 |
71 |
47 |
G | |
01001000 |
72 |
48 |
H | |
01001001 |
73 |
49 |
I | |
01001010 |
74 |
4A |
J | |
01001011 |
75 |
4B |
K | |
01001100 |
76 |
4C |
L | |
01001101 |
77 |
4D |
M | |
01001110 |
78 |
4E |
N | |
01001111 |
79 |
4F |
O | |
01010000 |
80 |
50 |
P | |
01010001 |
81 |
51 |
Q | |
01010010 |
82 |
52 |
R | |
01010011 |
83 |
53 |
S | |
01010100 |
84 |
54 |
T | |
01010101 |
85 |
55 |
U | |
01010110 |
86 |
56 |
V | |
01010111 |
87 |
57 |
W | |
01011000 |
88 |
58 |
X | |
01011001 |
89 |
59 |
Y | |
01011010 |
90 |
5A |
Z | |
01011011 |
91 |
5B |
[ | |
01011100 |
92 |
5C |
\ | |
01011101 |
93 |
5D |
] | |
01011110 |
94 |
5E |
^ | |
01011111 |
95 |
5F |
_ | |
01100000 |
96 |
60 |
` | |
01100001 |
97 |
61 |
a | |
01100010 |
98 |
62 |
b | |
01100011 |
99 |
63 |
c | |
01100100 |
100 |
64 |
d | |
01100101 |
101 |
65 |
e | |
01100110 |
102 |
66 |
f | |
01100111 |
103 |
67 |
g | |
01101000 |
104 |
68 |
h | |
01101001 |
105 |
69 |
i | |
01101010 |
106 |
6A |
j | |
01101011 |
107 |
6B |
k | |
01101100 |
108 |
6C |
l | |
01101101 |
109 |
6D |
m | |
01101110 |
110 |
6E |
n | |
01101111 |
111 |
6F |
o | |
01110000 |
112 |
70 |
p | |
01110001 |
113 |
71 |
q | |
01110010 |
114 |
72 |
r | |
01110011 |
115 |
73 |
s | |
01110100 |
116 |
74 |
t | |
01110101 |
117 |
75 |
u | |
01110110 |
118 |
76 |
v | |
01110111 |
119 |
77 |
w | |
01111000 |
120 |
78 |
x | |
01111001 |
121 |
79 |
y | |
01111010 |
122 |
7A |
z | |
01111011 |
123 |
7B |
{ | |
01111100 |
124 |
7C |
| | |
01111101 |
125 |
7D |
} | |
01111110 |
126 |
7E |
~ | |
01111111 |
127 |
7F |
DEL (Delete) |
删除 |
上表列出的是标准的ASCII编码,它共收录了128个字符,用一个字节中较低的7个比特位(Bit)足以表示(27 = 128),所以还会空闲下一个比特位,它就被浪费了。