用数字表示文字
我们要用数字来表示文字。
为什么要这样做呢?因为我们很快就要接触计算机,也就是所谓的“电脑”了。
见名知义,计算机首先是用来“计算”的。要对什么东西做“计算”呢?自然是“数”。
现代计算机的思路便是将一切都表示成数。文字可以表示成一连串的数,图片也可以表示成一连串的数,视频也可以。这样一来,计算机就有着充足的能力来表示和处理它们了。
文字是我们经常接触的、结构很简单的东西。(至少表面上看起来是这样。)接下来的编程教程也经常要和文字打交道。我们不妨先看一看,文字是怎么被表示成数的。
一段英文文字
所以我们现在先考虑最简单的问题:如何将下面一串英文文本表示成一连串的数?
我们先用这么一个纯英文例子入手,不仅因为英文所使用的拉丁字母数量少,还因为研究有着异域风情的文字(拉丁字母)而不是汉字说不定可以让我们更专注于它如何被表示。
我们发现,所谓的文字竟然是由一个个字母和标点符号拼起来的!(我去,不早说!)
我们不妨把字母和标点符号统称为字符。比如说,字母“t”是一个字符,符号“.”也是一个字符。
我们让每一个字符对应一个非负的整数(之后会简称为“整数”),我们就能用一连串的整数来表示一段文字了。我们不妨现在就设计一套表示方式。
先让小写字母对应 1 至 26:
| 字符 | 整数 |
|---|---|
| a | 1 |
| b | 2 |
| c | 3 |
| … | … |
| z | 26 |
再让大写字母对应 27 至 52:
| 字符 | 整数 |
|---|---|
| A | 27 |
| B | 28 |
| C | 29 |
| … | … |
| Z | 52 |
我们还得让单引号 ' 、句点 . 、下划线 _ 还有空格这 4 个特殊字符对应上自己的整数,因为刚才的文字里用到它们了。不妨就直接顺着刚才的整数吧:
| 字符 | 整数 |
|---|---|
| ' | 53 |
| . | 54 |
| _ | 55 |
| (空格) | 56 |
所以我们可以试着把“It's me.”这个句子转换成一连串的整数了。按照刚才的表格,因为:
I对应 35;t对应 20;'对应 53;s对应 19;对应 56;m对应 13;e对应 5;.对应 54;
所以我们可以用一个整数数列:
来表示这句 It's me. 了。
同理,我们可以用这个整数数列:
来表示 My name is LS_Hower. 这句话。读者可以自行验证。
不过这两句话位于两个不同的行,它们之间是应当隔着一个“换行”的。我们不妨给“换行”也分配一个整数,57。
所以,我们就可以只用一串整数将这一整段话表示出来了:
注意这里用到了一个 \(57\) 。在它之前是本节开始那段话第一行的内容,在它之后是第二行的内容。
“换行”看起来好像不太像传统意义上的“字符”,它更像是来控制我们的文字要以怎样的方式显示的。但它的地位确实和其他字符是一样的,有自己所对应的一个整数。“换行”是一种 控制字符 。
一段带有数字的英文文字
考虑下面这段话:
这里出现了新的字符,分别是 6 和 7 。我们需要扩展一下我们刚刚的表格了。
阿拉伯数字也不过只有 10 个罢了,分别是 0 1 2 3 4 5 6 7 8 9 。它们只不过也是 10 个字符罢了。我们给它们也各自分配一个整数即可,如下:
| 字符 | 整数 |
|---|---|
| 0 | 58 |
| 1 | 59 |
| 2 | 60 |
| 3 | 61 |
| 4 | 62 |
| 5 | 63 |
| 6 | 64 |
| 7 | 65 |
| 8 | 66 |
| 9 | 67 |
既然字符 6 对应的整数是 64,字符 7 对应的整数是 65,那么刚刚这句话就也可以用一串整数表示出来了:
一段中文文字
考虑这样一段中文文字:
英文字母、数字和符号加起来好像也就不过一百个,但是汉字有数万个甚至多于十万个。如果为它们一一分配整数,这个整数在后期就要达到几万的级别了。
真的要这样做吗?当然!
我们现在就分配一下整数吧:
| 字符 | 整数 |
|---|---|
| , | 1000 |
| 。 | 1001 |
| 你 | 1002 |
| 好 | 1003 |
| 我 | 1004 |
| 是 | 1005 |
那么刚才这段话也不难了:
我们让汉字对应的整数的所在范围(区间)和英文对应的整数的范围不重叠,那么我们就可以放心地表示中英混用的文章。推广一下,对于其他各国文字,如希腊字母和俄文字母,还有日文假名等等,我们也都可以一一分配整数。只要保证不会有撞车,那么我们就可以用整数的数列来表达世界上一切文字了。
(什么,你说阿拉伯文从右往左写所以好像会比较棘手?好吧,确实比较棘手,但是这属于深入钻研的时候才需要考虑的问题了。)
ASCII 与 Unicode
总结一下:选定一些字符,给每一个都字符分配一个非负整数,这样一来,用一串非负整数就能表示一段文字了。
以上思路是早在几十年前就成形了的。我们选定的这些字符所构成的集合称为 抽象字符表 ,而让每个字符对应一个非负整数之后,我们得到的就是一个 编码字符集 。
显然,每个人或者团体都发明自己的一套编码字符集并不是一件好事,这会让交流和沟通变得极其困难。此时就需要一个行业标准。
于是,在 1963 年,美国国家标准协会(ANSI)从当时的电报码出发,制定并推出了一套编码字符集标的的第一版。这个编码字符集称为 ASCII (美国信息交换标准代码,American Standard Code for Information Interchange)。
ASCII 只选取了 128 个字符,并让它们对应了从 0 到 127 这个范围内的整数。具体内容如下:
TODO: 继续