密码学之ASCII编码(02)
🌊 作者主页:海拥
🌊 简介:🏆CSDN全栈领域优质创作者、🥇HDZ核心组成员、🥈蝉联C站周榜前十
🌊 粉丝福利:粉丝群 每周送六本书,不定期送各种小礼品
ASCII编码
ASCII ((American Standard Code for Information Interchange): 美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。它是最通用的信息交换标准,并等同于国际标准ISO/IEC 646。ASCII第一次以规范标准的类型发表是在1967年,最后一次更新则是在1986年,到目前为止共定义了128个字符
@TOC
一、产生原因
在计算机中,所有的数据在存储和运算时都要使用二进制数表示(因为计算机用高电平和低电平分别表示1和0),例如,像a、b、c、d这样的52个字(包括大写)以及0、1等数字还有一些常用的符号(例如*、#、@等)在计算机中存储时也要使用二进制数来表示,而具体用哪些二进制数字表示哪个符号,当然每个人都可以约定自己的一套(这就叫编码),而大家如果要想互相通信而不造成混乱,那么大家就必须使用相同的编码规则,于是美国有关的标准化组织就出台了ASCII编码,统一规定了上述常用符号用哪些二进制数来表示。
美国信息交换标准代码是由美国国家标准学会(American National Standard Institute , ANSI )制定的,是一种标准的单字节字符编码方案,用于基于文本的数据。它最初是美国国家标准,供不同计算机在相互通信时用作共同遵守的西文字符编码标准,后来它被国际标准化组织(International Organization for Standardization, ISO)定为国际标准,称为ISO 646标准。适用于所有拉丁文字字母。
二、表达方式
ASCII 码使用指定的7 位或8 位二进制数组合来表示128 或256 种可能的字符。标准ASCII 码也叫基础ASCII码,使用7 位二进制数(剩下的1位二进制为0)来表示所有的大写和小写字母,数字0 到9、标点符号,以及在美式英语中使用的特殊控制字符。其中:
0~31及127(共33个)是控制字符或通信专用字符(其余为可显示字符),如控制符:LF(换行)、CR(回车)、FF(换页)、DEL(删除)、BS(退格)、BEL(响铃)等;通信专用字符:SOH(文头)、EOT(文尾)、ACK(确认)等;ASCII值为8、9、10 和13 分别转换为退格、制表、换行和回车字符。它们并没有特定的图形显示,但会依不同的应用程序,而对文本显示有不同的影响 。
32~126(共95个)是字符(32是空格),其中48~57为0到9十个阿拉伯数字。
65~90为26个大写英文字母,97~122号为26个小写英文字母,其余为一些标点符号、运算符号等。
同时还要注意,在标准ASCII中,其最高位(b7)用作奇偶校验位。所谓奇偶校验,是指在代码传送过程中用来检验是否出现错误的一种方法,一般分奇校验和偶校验两种。奇校验规定:正确的代码一个字节中1的个数必须是奇数,若非奇数,则在最高位b7添1;偶校验规定:正确的代码一个字节中1的个数必须是偶数,若非偶数,则在最高位b7添1。
后128个称为扩展ASCII码。许多基于x86的系统都支持使用扩展(或“高”)ASCII。扩展ASCII 码允许将每个字符的第8 位用于确定附加的128 个特殊符号字符、外来语字母和图形符号。
三、标准表
Bin
(二进制)
|
Oct
(八进制)
|
Dec
(十进制)
|
Hex
(十六进制)
|
缩写/字符
|
解释
|
0000 0000
|
00
|
0
|
0x00
|
NUL(null)
|
空字符
|
0000 0001
|
01
|
1
|
0x01
|
SOH(start of headline)
|
标题开始
|
0000 0010
|
02
|
2
|
0x02
|
STX (start of text)
|
正文开始
|
0000 0011
|
03
|
3
|
0x03
|
ETX (end of text)
|
正文结束
|
0000 0100
|
04
|
4
|
0x04
|
EOT (end of transmission)
|
传输结束
|
0000 0101
|
05
|
5
|
0x05
|
ENQ (enquiry)
|
请求
|
0000 0110
|
06
|
6
|
0x06
|
ACK (acknowledge)
|
收到通知
|
0000 0111
|
07
|
7
|
0x07
|
BEL (bell)
|
响铃
|
0000 1000
|
010
|
8
|
0x08
|
BS (backspace)
|
退格
|
0000 1001
|
011
|
9
|
0x09
|
HT (horizontal tab)
|
水平制表符
|
0000 1010
|
012
|
10
|
0x0A
|
LF (NL line feed, new line)
|
换行键
|
0000 1011
|
013
|
11
|
0x0B
|
VT (vertical tab)
|
垂直制表符
|
0000 1100
|
014
|
12
|
0x0C
|
FF (NP form feed, new page)
|
换页键
|
0000 1101
|
015
|
13
|
0x0D
|
CR (carriage return)
|
回车键
|
0000 1110
|
016
|
14
|
0x0E
|
SO (shift out)
|
不用切换
|
0000 1111
|
017
|
15
|
0x0F
|
SI (shift in)
|
启用切换
|
0001 0000
|
020
|
16
|
0x10
|
DLE (data link escape)
|
数据链路转义
|
0001 0001
|
021
|
17
|
0x11
|
DC1 (device control 1)
|
设备控制1
|
0001 0010
|
022
|
18
|
0x12
|
DC2 (device control 2)
|
设备控制2
|
0001 0011
|
023
|
19
|
0x13
|
DC3 (device control 3)
|
设备控制3
|
0001 0100
|
024
|
20
|
0x14
|
DC4 (device control 4)
|
设备控制4
|
0001 0101
|
025
|
21
|
0x15
|
NAK (negative acknowledge)
|
拒绝接收
|
0001 0110
|
026
|
22
|
0x16
|
SYN (synchronous idle)
|
同步空闲
|
0001 0111
|
027
|
23
|
0x17
|
ETB (end of trans. block)
|
结束传输块
|
0001 1000
|
030
|
24
|
0x18
|
CAN (cancel)
|
取消
|
0001 1001
|
031
|
25
|
0x19
|
EM (end of medium)
|
媒介结束
|
0001 1010
|
032
|
26
|
0x1A
|
SUB (substitute)
|
代替
|
0001 1011
|
033
|
27
|
0x1B
|
ESC (escape)
|
换码(溢出)
|
0001 1100
|
034
|
28
|
0x1C
|
FS (file separator)
|
文件分隔符
|
0001 1101
|
035
|
29
|
0x1D
|
GS (group separator)
|
分组符
|
0001 1110
|
036
|
30
|
0x1E
|
RS (record separator)
|
记录分隔符
|
0001 1111
|
037
|
31
|
0x1F
|
US (unit separator)
|
单元分隔符
|
0010 0000
|
040
|
32
|
0x20
|
(space)
|
空格
|
0010 0001
|
041
|
33
|
0x21
|
!
|
叹号 |
0010 0010
|
042
|
34
|
0x22
|
"
|
双引号 |
0010 0011
|
043
|
35
|
0x23
|
#
|
井号 |
0010 0100
|
044
|
36
|
0x24
|
$
|
美元符 |
0010 0101
|
045
|
37
|
0x25
|
%
|
百分号 |
0010 0110
|
046
|
38
|
0x26
|
&
|
和号 |
0010 0111
|
047
|
39
|
0x27
|
'
|
闭单引号 |
0010 1000
|
050
|
40
|
0x28
|
(
|
开括号
|
0010 1001
|
051
|
41
|
0x29
|
)
|
闭括号
|
0010 1010
|
052
|
42
|
0x2A
|
*
|
星号 |
0010 1011
|
053
|
43
|
0x2B
|
+
|
加号 |
0010 1100
|
054
|
44
|
0x2C
|
,
|
逗号 |
0010 1101
|
055
|
45
|
0x2D
|
-
|
减号/破折号 |
0010 1110
|
056
|
46
|
0x2E
|
.
|
句号 |
0010 1111
|
057
|
47
|
0x2F
|
/
|
斜杠 |
0011 0000
|
060
|
48
|
0x30
|
0
|
字符0 |
0011 0001
|
061
|
49
|
0x31
|
1
|
字符1 |
0011 0010
|
062
|
50
|
0x32
|
2
|
字符2 |
0011 0011
|
063
|
51
|
0x33
|
3
|
字符3 |
0011 0100
|
064
|
52
|
0x34
|
4
|
字符4 |
0011 0101
|
065
|
53
|
0x35
|
5
|
字符5 |
0011 0110
|
066
|
54
|
0x36
|
6
|
字符6 |
0011 0111
|
067
|
55
|
0x37
|
7
|
字符7 |
0011 1000
|
070
|
56
|
0x38
|
8
|
字符8 |
0011 1001
|
071
|
57
|
0x39
|
9
|
字符9 |
0011 1010
|
072
|
58
|
0x3A
|
:
|
冒号 |
0011 1011
|
073
|
59
|
0x3B
|
;
|
分号 |
0011 1100
|
074
|
60
|
0x3C
|
<
|
小于 |
0011 1101
|
075
|
61
|
0x3D
|
=
|
等号 |
0011 1110
|
076
|
62
|
0x3E
|
>
|
大于 |
0011 1111
|
077
|
63
|
0x3F
|
?
|
问号 |
0100 0000
|
0100
|
64
|
0x40
|
@
|
电子邮件符号 |
0100 0001
|
0101
|
65
|
0x41
|
A
|
大写字母A |
0100 0010
|
0102
|
66
|
0x42
|
B
|
大写字母B |
0100 0011
|
0103
|
67
|
0x43
|
C
|
大写字母C |
0100 0100
|
0104
|
68
|
0x44
|
D
|
大写字母D |
0100 0101
|
0105
|
69
|
0x45
|
E
|
大写字母E |
0100 0110
|
0106
|
70
|
0x46
|
F
|
大写字母F |
0100 0111
|
0107
|
71
|
0x47
|
G
|
大写字母G |
0100 1000
|
0110
|
72
|
0x48
|
H
|
大写字母H |
0100 1001
|
0111
|
73
|
0x49
|
I
|
大写字母I |
01001010
|
0112
|
74
|
0x4A
|
J
|
大写字母J |
0100 1011
|
0113
|
75
|
0x4B
|
K
|
大写字母K |
0100 1100
|
0114
|
76
|
0x4C
|
L
|
大写字母L |
0100 1101
|
0115
|
77
|
0x4D
|
M
|
大写字母M |
0100 1110
|
0116
|
78
|
0x4E
|
N
|
大写字母N |
0100 1111
|
0117
|
79
|
0x4F
|
O
|
大写字母O |
0101 0000
|
0120
|
80
|
0x50
|
P
|
大写字母P |
0101 0001
|
0121
|
81
|
0x51
|
Q
|
大写字母Q |
0101 0010
|
0122
|
82
|
0x52
|
R
|
大写字母R |
0101 0011
|
0123
|
83
|
0x53
|
S
|
大写字母S |
0101 0100
|
0124
|
84
|
0x54
|
T
|
大写字母T |
0101 0101
|
0125
|
85
|
0x55
|
U
|
大写字母U |
0101 0110
|
0126
|
86
|
0x56
|
V
|
大写字母V |
0101 0111
|
0127
|
87
|
0x57
|
W
|
大写字母W |
0101 1000
|
0130
|
88
|
0x58
|
X
|
大写字母X |
0101 1001
|
0131
|
89
|
0x59
|
Y
|
大写字母Y |
0101 1010
|
0132
|
90
|
0x5A
|
Z
|
大写字母Z |
0101 1011
|
0133
|
91
|
0x5B
|
[
|
开方括号 |
0101 1100
|
0134
|
92
|
0x5C
|
\
|
反斜杠 |
0101 1101
|
0135
|
93
|
0x5D
|
]
|
闭方括号 |
0101 1110
|
0136
|
94
|
0x5E
|
^
|
脱字符 |
0101 1111
|
0137
|
95
|
0x5F
|
_
|
下划线 |
0110 0000
|
0140
|
96
|
0x60
|
`
|
开单引号 |
0110 0001
|
0141
|
97
|
0x61
|
a
|
小写字母a |
0110 0010
|
0142
|
98
|
0x62
|
b
|
小写字母b |
0110 0011
|
0143
|
99
|
0x63
|
c
|
小写字母c |
0110 0100
|
0144
|
100
|
0x64
|
d
|
小写字母d |
0110 0101
|
0145
|
101
|
0x65
|
e
|
小写字母e |
0110 0110
|
0146
|
102
|
0x66
|
f
|
小写字母f |
0110 0111
|
0147
|
103
|
0x67
|
g
|
小写字母g |
0110 1000
|
0150
|
104
|
0x68
|
h
|
小写字母h |
0110 1001
|
0151
|
105
|
0x69
|
i
|
小写字母i |
0110 1010
|
0152
|
106
|
0x6A
|
j
|
小写字母j |
0110 1011
|
0153
|
107
|
0x6B
|
k
|
小写字母k |
0110 1100
|
0154
|
108
|
0x6C
|
l
|
小写字母l |
0110 1101
|
0155
|
109
|
0x6D
|
m
|
小写字母m |
0110 1110
|
0156
|
110
|
0x6E
|
n
|
小写字母n |
0110 1111
|
0157
|
111
|
0x6F
|
o
|
小写字母o |
0111 0000
|
0160
|
112
|
0x70
|
p
|
小写字母p |
0111 0001
|
0161
|
113
|
0x71
|
q
|
小写字母q |
0111 0010
|
0162
|
114
|
0x72
|
r
|
小写字母r |
0111 0011
|
0163
|
115
|
0x73
|
s
|
小写字母s |
0111 0100
|
0164
|
116
|
0x74
|
t
|
小写字母t |
0111 0101
|
0165
|
117
|
0x75
|
u
|
小写字母u |
0111 0110
|
0166
|
118
|
0x76
|
v
|
小写字母v |
0111 0111
|
0167
|
119
|
0x77
|
w
|
小写字母w |
0111 1000
|
0170
|
120
|
0x78
|
x
|
小写字母x |
0111 1001
|
0171
|
121
|
0x79
|
y
|
小写字母y |
0111 1010
|
0172
|
122
|
0x7A
|
z
|
小写字母z |
0111 1011
|
0173
|
123
|
0x7B
|
{
|
开花括号 |
0111 1100
|
0174
|
124
|
0x7C
|
|
|
垂线 |
0111 1101
|
0175
|
125
|
0x7D
|
}
|
闭花括号 |
0111 1110
|
0176
|
126
|
0x7E
|
~
|
波浪号 |
0111 1111
|
0177
|
127
|
0x7F
|
DEL (delete)
|
删除
|
四、大小规则
常见ASCII码的大小规则:0~9<A~Z<a~z
。
1)数字比字母要小。如 “7”<“F”;
2)数字0比数字9要小,并按0到9顺序递增。如 “3”<“8” ;
3)字母A比字母Z要小,并按A到Z顺序递增。如“A”<“Z” ;
4)同个字母的大写字母比小写字母要小32。如“A”<“a” 。
几个常见字母的ASCII码大小: “A”为65;“a”为97;“0”为 48 。
五、问题
在英语中,用128个符号编码便可以表示所有,但是用来表示其他语言,128个符号是不够的。比如,在法语中,字母上方有注音符号,它就无法用 ASCII 码表示。于是,一些欧洲国家就决定,利用字节中闲置的最高位编入新的符号。比如,法语中的é的编码为130(二进制10000010)。这样一来,这些欧洲国家使用的编码体系,可以表示最多256个符号 。
但是,这里又出现了新的问题。不同的国家有不同的字母,因此,哪怕它们都使用256个符号的编码方式,代表的字母却不一样。比如,130在法语编码中代表了é,在希伯来语编码中却代表了字母Gimel (ג),在俄语编码中又会代表另一个符号。但是不管怎样,所有这些编码方式中,0–127表示的符号是一样的,不一样的只是128–255的这一段 。
至于亚洲国家的文字,使用的符号就更多了,汉字就多达10万左右。一个字节只能表示256种符号,肯定是不够的,就必须使用多个字节表达一个符号。比如,简体中文常见的编码方式是 GB2312,使用两个字节表示一个汉字,所以理论上最多可以表示 256 x 256 = 65536 个符号。
六、扩展
- 1981年IBM PC ROM256个字符的字符集,即IBM扩展字符集。
- 1985年11Windows字符集被称作“ANSI字符集”,遵循了ANSI草案和ISO标准(ANSI/ISO8859-1-1987,简“Latin 1”。
- 为了解决中国、日本和韩国的象形文字符和ASCII的某种兼容性,出现了双字节字符集(DBCS:double-byte character set)。DBCS从 第256 代码开始,就像ASCII一样,最初的128个代码是ASCII。然而,较高的128个代码中的某些总是跟随着第二个字节。这两个字节一起(称作首字节和跟随字节)定义一个字符,通常是一个复杂的象形文字。
七、汉字编码
目前的文字编码标准主要有 ASCII、GB2312、GBK、Unicode等。ASCII 编码是最简单的西文编码方案。GB2312、GBK、GB18030 是汉字字符编码方案的国家标准。ISO/IEC 10646 和 Unicode 都是全球字符编码的国际标准。下面对与汉字相关的编码方案GB2312,GBK与GB18030做简要的分析。
GB2312-80 标准
GB2312-80 是 1980 年制定的中国汉字编码国家标准。共收录 7445 个字符,其中汉字 6763 个。GB2312 兼容标准 ASCII码,采用扩展 ASCII 码的编码空间进行编码,一个汉字占用两个字节,每个字节的最高位为 1。具体办法是:收集了 7445 个字符组成 94*94 的方阵,每一行称为一个“区”,每一列称为一个“位”,区号位号的范围均为 01-94,区号和位号组成的代码称为“区位码”。区位输入法就是通过输入区位码实现汉字输入的。将区号和位号分别加上 20H,得到的 4 位十六进制整数称为国标码,编码范围为 0x2121~0x7E7E。为了兼容标准 ASCII 码,给国标码的每个字节加 80H,形成的编码称为机内码,简称内码,是汉字在机器中实际的存储代码GB2312-80 标准的内码范围是 0xA1A1~0xFEFE。
GBK 编码标准
《汉字内码扩展规范》(GBK) 于1995年制定,兼容GB2312、GB13000-1、BIG5 编码中的所有汉字,使用双字节编码,编码空间为 0x8140~0xFEFE,共有 23940 个码位,其中 GBK1 区和 GBK2 区也是 GB2312 的编码范围。收录了 21003 个汉字。GBK向下与 GB 2312 编码兼容,向上支持 ISO 10646.1国际标准,是前者向后者过渡过程中的一个承上启下的产物。ISO 10646 是国际标准化组织ISO 公布的一个编码标准,即 Universal Multilpe-Octet Coded Character Set(简称UCS),大陆译为《通用多八位编码字符集》,台湾译为《广用多八位元编码字元集》,它与 Unicode 组织的Unicode编码完全兼容。ISO 10646.1 是该标准的第一部分《体系结构与基本多文种平面》。我国 1993 年以 GB 13000.1 国家标准的形式予以认可(即 GB 13000.1 等同于 ISO 10646.1。
GB18030编码标准
国家标准GB18030-2000《信息交换用汉字编码字符集基本集的补充》是我国继GB2312-1980和GB13000-1993之后最重要的汉字编码标准,是我国计算机系统必须遵循的基础性标准之一。GB18030-2000编码标准是由信息产业部和国家质量技术监督局在2000年 3月17日联合发布的,并且将作为一项国家标准在2001年的1月正式强制执行。GB18030-2005《信息技术中文编码字符集》是我国制订的以汉字为主并包含多种我国少数民族文字(如藏、蒙古、傣、彝、朝鲜、维吾尔文等)的超大型中文编码字符集强制性标准,其中收入汉字70000余个。
未完待续…
下一节:密码学之恺撒加密(03)
- 点赞
- 收藏
- 关注作者
评论(0)