ASCII编码,将英文存储到计算机
我们之前说过,计算机以二进制形式存储数据,它只知道0和1两个数字。我们在屏幕上看到的字符在存储前都是转换成二进制(0和1序列)的,显示时要根据二进制到对应的字符。
可想而知,特定的文字必然对应着固定的二进制,否则在转换时将发生混乱。那么,怎样将文字与二进制对应起来呢?这就需要有一套规范,计算机公司和软件开发者都必须遵守,这样的一套规范就称为字符集(Character Set)或者字符编码(Character Encoding)。
严格来说,字符集和字符编码不是一个概念。字符集定义了字符和二进制之间的对应关系,并为字符分配唯一的编号,而字符编码则规定了如何在计算机中存储字符的编号。暂且不讨论这些细节,就当是一个概念吧。在这一节中,我也将这两个概念混在一起,不作区分。
字符集给每个字符分配一个唯一的编号,类似于一个学生的学号,通过编号可以到对应的字符。
字符集可以理解为一个大表,里面列出了所有字符和二进制的对应关系。它是计算机显示或存储字符的查表过程。
在计算机逐步发展的过程中,先后出现了几十种甚至上百种字符集,有些还在使用,有些已经淹没在了历史的长河中,本节我们要讲解的是一种专门针对英文的字符集——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 个字符,包含了基本的拉丁字母(英文字母)、阿拉伯数字(也就是 )、标点符号(,.!等)、特殊符号(@#$%^&等)以及一些具有控制功能的字符(往往不会显示出来)。
在 ASCII 编码中,大写字母、小写字母和阿拉伯数字都是连续分布的(见下表),这给程序设计带来了很大的方便。例如要判断一个字符是否是大写字母,就可以判断该字符的 ASCII 编码值是否在 65~90 的范围内。
EBCDIC 编码正好相反,它的英文字母不是连续排列的,中间出现了多次断续,给编程带来了一些困难。现在连 IBM 自己也不使用 EBCDIC 了,转而使用更加优秀的 ASCII。
ASCII 编码已经成了计算机的通用标准,没有人再使用 EBCDIC 编码了,它已经消失在历史的长河中了。
ASCII 编码一览表
标准 ASCII 编码共收录了 128 个字符,其中包含了 33 个控制字符(具有某些特殊功能但是无法显示的字符)和 95 个可显示字符。
ASCII 编码一览表(淡黄背景为控制字符,白背景为可显示字符)
二进制
十进制
十六进制
字符/缩写
解释
0
00
NUL (NULL)
空字符
1
01
SOH (Start Of Headling)
标题开始
2
02
STX (Start Of Text)
正文开始
3
03
ETX (End Of Text)
正文结束
4
04
EOT (End Of Transmission)
传输结束
5
05
ENQ (Enquiry)
请求
6
06
ACK (Acknowledge)
回应/响应/收到通知
7
07
BEL (Bell)
响铃
8
08
BS (Backspace)
退格
9
09
HT (Horizontal Tab)
水平制表符
10
0A
LF/NL(Line Feed/New Line)
换行键
11
0B
VT (Vertical Tab)
垂直制表符
12
0C
FF/NP (Form Feed/New Page)
换页键
13
0D
CR (Carriage Return)
回车键
14
0E
SO (Shift Out)
不用切换
15
0F
SI (Shift In)
启用切换
16
10
DLE (Data Link Escape)
数据链路转义
17
11
DC1/XON(Device Control 1/Transmission On)
设备控制1/传输开始
18
12
DC2 (Device Control 2)
设备控制2
19
13
DC3/XOFF(Device Control 3/Transmission Off)
设备控制3/传输中断
20
14
DC4 (Device Control 4)
设备控制4
21
15
NAK (Negative Acknowledge)
无响应/非正常响应/拒绝接收
22
16
SYN (Synchronous Idle)
同步空闲
23
17
ETB (End of Transmission Block)
传输块结束/块传输终止
24
18
CAN (Cancel)
取消
25
19
EM (End of Medium)
已到介质末端/介质存储已满/介质中断
26
1A
SUB (Substitute)
替补/替换
27
1B
ESC (Escape)
逃离/取消
28
1C
FS ()
文件分割符
29
1D
GS (Group Separator)
组分隔符/分组符
30
1E
RS (Record Separator)
记录分离符
31
1F
US (Unit Separator)
单元分隔符
32
20
(Space)
空格
33
21
!
 
34
22
"
 
35
23
#
 
36
24
$
 
37
25
%
 
38
26
&
 
39
27
'
 
40
28
(
 
41
29
)
 
42
2A
*
 
43
2B
+
 
44
html符号代码对照表2C
,
 
45
2D
-
 
46
2E
.
 
47
2F
/
 
48
30
0
 
49
31
1
 
50
32
2
 
51
33
3
 
52
34
4
 
53
35
5
 
54
36
6
 
55
37
7
 
56
38
8
 
57
39
9
 

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。