标准ASCII编码表

Last Updated: 2024-02-16 13:57:47 Friday

-- TOC --

ASCII(American Standard Code for Information Interchange,美国信息互换标准代码)是一套基于拉丁字母的字符编码,共收录了128个字符,用一个字节就可以存储(实际上7bit就可以),它等同于国际标准ISO/IEC 646。

ASCII的发音[ˈæski]

ASCII 规范于 1967 年第一次发布,最后一次更新是在 1986 年,它包含了 33 个控制字符(具有某些特殊功能但是无法显示的字符)和 95 个可显示字符。

ASCII简介

ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。

ASCII是现今最通用的单字节编码系统,并等同于国际标准ISO/IEC 646。请注意,ASCII是American Standard Code for Information Interchange缩写,而不是ASCⅡ(罗马数字2),有很多人在这个地方产生误解。

标准ASCII只用了7个bit位,最高的1bit原是用来做奇偶校验的。

我理解的奇偶校验,通信双方先约定好采用奇校验或偶校验,然后在传输时,设置最高的1bit,用来凑出奇或偶,接收方按约定好的奇或偶的方式,检查接收是否出错。(如果同时错2bit,奇偶校验就失效了,但奇偶校验只多用1bit)

所有的编码系统,都会兼容ASCII编码,计算机内的很多软件算法,都是基于ASCII编码的特点编写的,比如大小写字母之间固定的间隔等。

标准ASCII编码表

数字 --> 大写字母 --> 小写字母,这个顺序就是字符串大小的比较顺序。

ascii

ascii

“回车/换行”的来历

著名的“回车/换行”字符,洋文分别称之为carriage returnline feed。在编程领域,这两个字符简写为 \r\n

为什么会有这么两个符号呢?

因为在电传打字机时代,当打印完一行之后,需要用一个控制命令把打印头复位(移到打印纸的左边),然后再用另一个控制命令把打印头往下移动一行。很自然地,这俩动作就对应了两个控制字符(CR和LF),也就是所谓的回车与换行。

ASCII字符表的开头部分,前面的32个字符,都是控制字符,很多都源自遥远的电报时代。

ASCII码8进制表示

0o是前缀,由Python的oct函数输出。

Decimal Octal Hex Bin
0 0o0 0x0 0b0
1 0o1 0x1 0b1
2 0o2 0x2 0b10
3 0o3 0x3 0b11
4 0o4 0x4 0b100
5 0o5 0x5 0b101
6 0o6 0x6 0b110
7 0o7 0x7 0b111
8 0o10 0x8 0b1000
9 0o11 0x9 0b1001
10 0o12 0xa 0b1010
11 0o13 0xb 0b1011
12 0o14 0xc 0b1100
13 0o15 0xd 0b1101
14 0o16 0xe 0b1110
15 0o17 0xf 0b1111
16 0o20 0x10 0b10000
17 0o21 0x11 0b10001
18 0o22 0x12 0b10010
19 0o23 0x13 0b10011
20 0o24 0x14 0b10100
21 0o25 0x15 0b10101
22 0o26 0x16 0b10110
23 0o27 0x17 0b10111
24 0o30 0x18 0b11000
25 0o31 0x19 0b11001
26 0o32 0x1a 0b11010
27 0o33 0x1b 0b11011
28 0o34 0x1c 0b11100
29 0o35 0x1d 0b11101
30 0o36 0x1e 0b11110
31 0o37 0x1f 0b11111
32 0o40 0x20 0b100000
33 0o41 0x21 0b100001
34 0o42 0x22 0b100010
35 0o43 0x23 0b100011
36 0o44 0x24 0b100100
37 0o45 0x25 0b100101
38 0o46 0x26 0b100110
39 0o47 0x27 0b100111
40 0o50 0x28 0b101000
41 0o51 0x29 0b101001
42 0o52 0x2a 0b101010
43 0o53 0x2b 0b101011
44 0o54 0x2c 0b101100
45 0o55 0x2d 0b101101
46 0o56 0x2e 0b101110
47 0o57 0x2f 0b101111
48 0o60 0x30 0b110000
49 0o61 0x31 0b110001
50 0o62 0x32 0b110010
51 0o63 0x33 0b110011
52 0o64 0x34 0b110100
53 0o65 0x35 0b110101
54 0o66 0x36 0b110110
55 0o67 0x37 0b110111
56 0o70 0x38 0b111000
57 0o71 0x39 0b111001
58 0o72 0x3a 0b111010
59 0o73 0x3b 0b111011
60 0o74 0x3c 0b111100
61 0o75 0x3d 0b111101
62 0o76 0x3e 0b111110
63 0o77 0x3f 0b111111
64 0o100 0x40 0b1000000
65 0o101 0x41 0b1000001
66 0o102 0x42 0b1000010
67 0o103 0x43 0b1000011
68 0o104 0x44 0b1000100
69 0o105 0x45 0b1000101
70 0o106 0x46 0b1000110
71 0o107 0x47 0b1000111
72 0o110 0x48 0b1001000
73 0o111 0x49 0b1001001
74 0o112 0x4a 0b1001010
75 0o113 0x4b 0b1001011
76 0o114 0x4c 0b1001100
77 0o115 0x4d 0b1001101
78 0o116 0x4e 0b1001110
79 0o117 0x4f 0b1001111
80 0o120 0x50 0b1010000
81 0o121 0x51 0b1010001
82 0o122 0x52 0b1010010
83 0o123 0x53 0b1010011
84 0o124 0x54 0b1010100
85 0o125 0x55 0b1010101
86 0o126 0x56 0b1010110
87 0o127 0x57 0b1010111
88 0o130 0x58 0b1011000
89 0o131 0x59 0b1011001
90 0o132 0x5a 0b1011010
91 0o133 0x5b 0b1011011
92 0o134 0x5c 0b1011100
93 0o135 0x5d 0b1011101
94 0o136 0x5e 0b1011110
95 0o137 0x5f 0b1011111
96 0o140 0x60 0b1100000
97 0o141 0x61 0b1100001
98 0o142 0x62 0b1100010
99 0o143 0x63 0b1100011
100 0o144 0x64 0b1100100
101 0o145 0x65 0b1100101
102 0o146 0x66 0b1100110
103 0o147 0x67 0b1100111
104 0o150 0x68 0b1101000
105 0o151 0x69 0b1101001
106 0o152 0x6a 0b1101010
107 0o153 0x6b 0b1101011
108 0o154 0x6c 0b1101100
109 0o155 0x6d 0b1101101
110 0o156 0x6e 0b1101110
111 0o157 0x6f 0b1101111
112 0o160 0x70 0b1110000
113 0o161 0x71 0b1110001
114 0o162 0x72 0b1110010
115 0o163 0x73 0b1110011
116 0o164 0x74 0b1110100
117 0o165 0x75 0b1110101
118 0o166 0x76 0b1110110
119 0o167 0x77 0b1110111
120 0o170 0x78 0b1111000
121 0o171 0x79 0b1111001
122 0o172 0x7a 0b1111010
123 0o173 0x7b 0b1111011
124 0o174 0x7c 0b1111100
125 0o175 0x7d 0b1111101
126 0o176 0x7e 0b1111110
127 0o177 0x7f 0b1111111

代码:

>>> for i in range(128):
...   print(i, '|', oct(i), '|', hex(i), '|', bin(i))

转义符号

C代码中,用\开始的序列,都是转义符号(Escape Character,也有说Escape Sequence,确实不是一个符号可以表示的)。

有些其它编程语言,比如Python,转义的语法与C基本相同。

\ddd:表示一个8进制表示的符号,最大取值\177

\xdd:表示一个16进制的符号,最大取值\x7F

超过取值范围的行为,跟具体编译器有关系,但基本上这是个错误!

char a = '\61';  //字符1
char b = '\141';  //字符a
char c = '\x31';  //字符1
char d = '\x61';  //字符a
char *str1 = "\x31\x32\x33\x61\x62\x63";  //字符串"123abc"
char *str2 = "\61\62\63\141\142\143";  //字符串"123abc"
char *str3 = "The string is: \61\62\63\x61\x62\x63"  //混用八进制和十六进制形式

一些常用的转义符号的简写:

转义字符 意义 ASCII码值(十进制)
\a 响铃(BEL) 007
\b 退格(BS) ,将当前位置移到前一列 008
\f 换页(FF),将当前位置移到下页开头 012
\n 换行(LF) ,将当前位置移到下一行开头 010
\r 回车(CR) ,将当前位置移到本行开头 013
\t 水平制表(HT) 009
\v 垂直制表(VT) 011
\e Escape 027
\' 单引号 039
\" 双引号 034
\\ 反斜杠 092

C语言中,双引号内的是字符串,单引号内的是单个字符!

Raw String

Raw String其实就是没有转义的字符串,即其中的\不表示转移,就是\本身,但要用\\来表示。

Latin-1(ISO-8859-1)

ISO-8859-1 (Western Europe) is a 8-bit single-byte coded character set. Also known as ISO Latin 1. The first 128 characters are identical to UTF-8 (and UTF-16).

这也是一个很常见的8bit编码方式,它只是扩展了ASCII没有用到的后128个编码位置。

latin-1.png

原ASCII只有美元符号,Latin-1扩展了欧元符号,人民币符号,还有千分号等符号。Python标准库中的http.server模块,在解码的时候,就指定为Latin-1。

本文链接:https://cs.pynote.net/sf/202109100/

-- EOF --

-- MORE --