---
schema_version: "library-reader-v1"
source_type: "original_book"
title: "编码 隐匿在计算机软硬件背后的语言"
author: null
edition: null
publisher: null
year: null
isbn: "9787121181184"
library_document_id: "38270854-596f-4a26-8183-db8c968c6020"
source_sha256: "249786274d83909f0bddc34d77f81ed8f0b14d1eac8843c772a37a3ecbfe2cfc"
pdf_physical_page_count: 438
pdf_physical_page_index_base: 0
range_start: 30
range_count: 10
html_url: "https://workshop.closeclaw.top/api/ai/read/38270854-596f-4a26-8183-db8c968c6020?start=30&limit=10"
markdown_url: "https://workshop.closeclaw.top/api/ai/read/38270854-596f-4a26-8183-db8c968c6020.md?start=30&limit=10"
previous_url: "https://workshop.closeclaw.top/api/ai/read/38270854-596f-4a26-8183-db8c968c6020.md?start=20&limit=10"
next_url: "https://workshop.closeclaw.top/api/ai/read/38270854-596f-4a26-8183-db8c968c6020.md?start=40&limit=10"
---

# 编码 隐匿在计算机软硬件背后的语言

> 页码规则：PDF_PHYSICAL_PAGE_INDEX 是从 0 开始的权威文件物理页索引；PRINTED_PAGE 是页面中识别出的印刷页码，可能为空，二者不得混用。

## PDF_PHYSICAL_PAGE_INDEX=30 | PRINTED_PAGE=14

很显然，盲人教育中一个主要的障碍就是盲人无法阅读印刷的书籍。瓦伦丁·霍伊(1745-1822)，巴黎皇家盲人学校的创始人，曾发明过一种在纸面上印下凸起文字的系统，这样盲人就可以通过触摸的方式来进行阅读了。但是这种文字系统使用起来很困难，而且使用这种方法来印刷的书籍也非常少。

霍伊先生视力健全，因此他被自身的感知模式所禁锢。对他来说，一个字母A就是一个A，而且字母A在记录时也必须看起来（或者感觉起来）像一个A（如果让他用手电筒交流的话，估计他会像我们最开始所做的那样，试图在空中比划出要表达的字母，但其实我们发现这法子根本不灵)。霍伊先生或许没有意识到，有一种完全不同于印刷字母的文字系统可能更加适合盲人阅读。

这种非常规编码方式的起源说出来可能有些出人意料。查尔斯·巴比尔（CharlesBarbier)，法国军队的一位军官，在1819年发明了一种他自称为“écriture nocturne”（也叫“夜间书写”）的文字系统。他在厚纸上使用凸起的点和划的组合来表示文字，这样当部队需要无声交流的时候，即使光线很暗，士兵们也可以通过这些符号互相传递信息。他们使用一个锥形的铁笔在厚纸的背面书写，这样纸的正面就会有相应的凸起。然后人们就可以使用手指触摸这些凸起的点和划来进行阅读了。

巴比尔文字系统的缺点是太过复杂了。该系统并非使用与字母表相对应的点划编码串来表示字母，而是用与读音相对应的编码串表示，因此有时仅仅是为了表示一个单词，就不得不使用很多的码字。如果只是传递简短的消息，这个系统用起来倒还不错；但是在表示长文本的时候，就明显力不从心，就更别说用来对整本书进行编码了。

布莱叶在12岁的时候就很熟悉巴比尔的这种文字系统了。他特别喜欢使用凸起的点，不仅仅因为凸起的点通过手指就可以很容易实现阅读，还因为它们“写”起来也很简单。在教室里，一个盲人学生如果有了纸张和铁笔，他就可以做笔记，而且同时还能阅读记下来的文字。路易斯·布莱叶开始不辞辛劳地改进这个文字系统，3年以后（那时他15岁）就创建成了自己的系统，而这个系统中的一些基本规范，直到今天仍在被人们所使用。在很长一段时间内，这种新的文字系统只被他们学校内部的人们所熟悉，但是渐渐地，布莱叶盲文传播到了世界的各个角落。1835年，路易斯·布莱叶患上了肺结核。1852年，就在布莱叶43岁生日刚过完不久，病魔无情地夺走了他的生命。

编码——隐匿在计算机软硬件背后的语言

14

## PDF_PHYSICAL_PAGE_INDEX=31 | PRINTED_PAGE=15

如今，在引导盲人进入文字殿堂的道路上，改进后的布莱叶盲文系统与磁带录音书进行着竞争，但是布莱叶盲文仍然是不可替代的工具，特别是对于又聋又盲的人来说，布莱叶盲文仍然是他们开启阅读大门的唯一钥匙。近些年来，布莱叶盲文被越来越多地应用到公共场所中，使得盲人朋友们可以越来越方便地使用电梯、自动取款机等设备。

在这一章中我们将解析布莱叶盲文，来看看它是如何工作的。我们并不是要真的学习布莱叶盲文，而且也无须刻意记住什么关于它的内容。我们仅仅希望从中窥探到编码的一些本质。

在布莱叶盲文中，每个在书写文字中用到的符号具体来说就是字母、数字和标点符号都被编码成为2×3的点码单元中的一个或者多个凸起的点。这个点码单元包含的点通常使用1到6的数字来编号。

在现代应用中，使用特殊的打印机或轧花机可以将布莱叶盲文印到纸张上。

即使只是用布莱叶盲文在本书中印上几页，造价也实在是有点儿高，所以我在书中使用一种符号来表示布莱叶盲文。在这种表示方法中，点码单元中所有的6个点都会被表示出来。大点表示这是一个凸起的点，小点则表示其对应的位置是平的。例如，下面的布莱叶盲文：

其中，第1，3，5点是凸起的，而第2，4，6点的位置是平的。

令我们感兴趣的是，这些点码都是二进制的。一个单独的点不是平的就是凸起的。也就是说我们可以把在莫尔斯编码中学到的知识应用到布莱叶盲文的分析中！我们现在已经知道，每组有6个点，并且每个点有平和凸两种状态，因此6个可平可凸的点的组合数就是 $2 \times 2 \times 2 \times 2 \times 2 \times 2$ ，即 $2 ^ { 6 }$ ，也就是64。

3 布莱叶盲文与二进制码

15

## PDF_PHYSICAL_PAGE_INDEX=32 | PRINTED_PAGE=16

因此，布莱叶盲文系统能够表示64个不同的码字。下图就是所有可能的64种码字。

假如发现布莱叶盲文中用到的码字数目少于64，就会有人问了，为什么64个可能的码字中有一些被遗弃不用呢？假如我们发现布莱叶盲文中用到的码字数目超过64，问题就更严重了，我们会怀疑自己的智商，甚至怀疑基本的数学原理到底2加2是不是等于4。

还是让我们来开始解析布莱叶盲文吧，首先看看基本的小写字母表。

编码隐匿在计算机软硬件背后的语言

16

## PDF_PHYSICAL_PAGE_INDEX=33 | PRINTED_PAGE=17

例如，词组“you and'me”用布莱叶盲文表示成如下组合：

注意，一个单词中每个字母所对应的点码单元之间都用一小块空白分开；而单词之间则用一个大的空格（实际上是没有凸点的点码单元）所分隔开来。

这就是路易斯·布莱叶制订的布莱叶盲文的基本规范，至少它对于拉丁字母很适用。布莱叶还制订了表示重音符号字母的编码，这在法语中要经常要用到。注意这里没有“w”这个字母的编码，因为在传统的法语中不会用到它（别担心，这个字母最后会出现的，下文将作讲解)。到此为止，64个码字中只使用了25个。

经过仔细的检查，你会发现，从我们列举的那个三排布莱叶盲文的例子（小写字母表）中，可以总结出一个规律。第一排（字母a到j）只用到了点码单元中最上面的四个点——第1、2、4和5点。第二排在复用了第一排的编码的基础上，把第3点改为凸点。第三排也沿用了同样的规律，只是将第3和6点改为凸点。

自从路易斯·布莱叶发明布莱叶盲文以来，其应用已经扩展到各个领域。目前在英文出版物中最常用的盲文系统被称为二级布莱叶盲文(Grade2Braille)。二级布莱叶盲文使用了很多缩写，以便于保存树型结构和提高阅读速度。例如，如果字母的码字单独出现，它们就表示一个普通的单词。以下三排图样（包含“完整的”第三排）为我们展示了这些单词的码字。

(none) but can do every from go have (none) just

:: :: ::

knowledge like more not (none) people quite rather so that

: : : :: : :

us very it you as and for of the with

因此，短语“you andme”使用二级布莱叶盲文就可以表示为：

3 布莱叶盲文与二进制码

17

## PDF_PHYSICAL_PAGE_INDEX=34 | PRINTED_PAGE=18

到目前为止，我们已经描述了31个码字—单词间的大空格（即没有凸点的点码单元)以及总共3排每排10个的字母和单词码字。与理论上可以达到的最多码字数64相比，我们还差得远呢。正如从下面的分析中我们将看到的那样，在二级布莱叶盲文里，没有任何的码字会被浪费。

首先，我们可以使用字母a到j的码字加6号凸点的组合。这些新码字通常用来表示单词中字母串的缩写，还有我们前面所担心的w字母（像上文的二级布莱叶盲文单词编码一样，表示w字母的编码也可以表示一个单词)。

例如，单词“about”使用二级布莱叶盲文可以记作：

然后，我们取从a到j的码字，“降低”它们使用的点位，只用到编号为2、3、5和6的点，这样就得到了新的码字。根据上下文环境，它们将被用来表示一些标点符号或者字符串缩写。

$$
\begin{array} { r l r l r l r l r l r l r l r l r l } { \mathrm {  ~ \hat { \rho } ~ } _ { : } } & { } & { \mathrm {  ~ \hat { \rho } ~ } _ { : } } & { } & { \mathrm {  ~ \hat { \rho } ~ } _ { : } } & { } & { \mathrm {  ~ \hat { \rho } ~ } _ { : } } & { } & { \mathrm {  ~ \hat { \rho } ~ } _ { : } } & { } & { \mathrm {  ~ \hat { \rho } ~ } _ { : } } & { } & { \mathrm {  ~ \hat { \rho } ~ } _ { : } } & { } & { \mathrm {  ~ \hat { \rho } ~ } _ { : } } & { } & { \mathrm {  ~ \hat { \rho } ~ } _ { : } } \\ { \mathrm {  ~ \hat { \rho } ~ } _ { : } } & { } & { \mathrm {  ~ \hat { \rho } ~ } _ { : } } & { } & { } & { \mathrm {  ~ \hat { \rho } ~ } _ { \ : } } & { } & { } & { \mathrm {  ~ \hat { \rho } ~ } _ { : } } & { } & { \mathrm {  ~ \hat { \rho } ~ } _ { : } } & { } & { } & { \mathrm {  ~ \hat { \rho } ~ } _ { : } } & { } & { } & { \mathrm {  ~ \hat { \rho } ~ } _ { : } } \\ { \mathrm {  ~ \hat { \rho } ~ } _ { : } } & { } & { } & { \mathrm {  ~ \hat { \rho } ~ } _ { : } } & { } & { } & { \mathrm {  ~ \hat { \rho } ~ } _ { : } } & { } & { } & { \mathrm {  ~ \hat { \rho } ~ } _ { : } } & { } & { } & { \mathrm {  ~ \hat { \rho } ~ } _ { : } } & { } & { } & { \mathrm {  ~ \hat { \rho } ~ } _ { : } } \end{array}
$$

前4个码字分别表示逗号、分号、冒号和句号。需要注意的是，左右括号使用的是相同的码字，但是开闭引号使用的却是不同的码字。

目前为止我们已经定义了51个码字了。“占用3、4、5和6号点”的码字还有很多组没有被定义，下面的6组就是这些被遗漏的码字，我们也用它们来表示一些字符串缩写和其他的标点符号。

编码—隐匿在计算机软硬件背后的语言

18

## PDF_PHYSICAL_PAGE_INDEX=35 | PRINTED_PAGE=19

表示字符串缩写“ble”的码字很重要，因为当它不是用来作为单词的一部分时，它的出现就意味着之后的码字应被译为数字。表示数字的码字与表示字母a到j的码字是相同的。

因此，下面这组编码：

表示的就是数字256。

如果你还要继续下去，那么我们还需要定义7个码字才算完全用满原有的64个码字。它们是：

第一个码字（4号点凸起）用来表示音调符号（accent indicator）。其他的码字则用来表示缩写的前缀或者其他的功能：4号和6号点凸起的码字（上表的第5个码字），根据上下文用来表示小数点或者强调符号（emphasis indicator)。5号和6号点凸起的编码，表示与“数字标识符”相对应的“字母标识符”（letter indicator)。

最后（如果你现在还为布莱叶盲文如何表示大写字母忧心忡忡的话)，我们还有6号凸点—大写标识符。这个符号表示它之后的字母将都被译为大写。例如，我们可以把这套文字系统的原创者的名字记做：

这串编码分别表示了一个大写字母标识符、字母1、缩写字符串ou、字母i和s，以及一个空格，再加一个大写字母标识符，还有字母b、r、a、i、1、1和e。（在实际应用中，可能会把名字末尾不发音的2个字母省略掉，以进一步压缩编码）

3 布莱叶盲文与二进制码

19

## PDF_PHYSICAL_PAGE_INDEX=36 | PRINTED_PAGE=20

综上所述，我们将6位二进制码（其实是6个点）所能表示的全部64种可能的编码都罗列了一遍。而且这64组编码中有很大一部分，根据上下文的不同将有着双重身份。尤其值得注意的是数字标识符和取消“数字标识状态”的字母标识符。它们改变了后面编码的意义从表示字母到表示数字，又从表示数字回到表示字母。像这样的编码通常被称作“优先码”（precedence codes）或者“换档码”（shift codes)。它们改变着作用域内编码的含义，直到作用域结束。

大写字母标识符表示紧随它的字母（而且仅仅是紧随它的字母）应该被译为大写。类似这样的编码被称为“逃逸码”(escape codes)。逃逸码让你“逃离”对编码串单调的、一成不变的解析，而转入一种新的解析方式中。在以后的章节中我们将看到，在使用二进制码对书面语言进行编码时，换档码和逃逸码是相当常见的。

编码隐匿在计算机软硬件背后的语言

20

## PDF_PHYSICAL_PAGE_INDEX=37 | PRINTED_PAGE=NOT_DETECTED

手电筒的剖析

手电筒的应用是极其广泛的，例如它可以帮助人们在背光的环境下阅读，也可以用于发送编码后的信息，这只是其中最显而易见的两个功能。普通的家用手电筒，还可以作为科普教育中的重要道具，引导人们走进神秘的电的世界。

电是一种神奇的现象。尽管电已经被普遍地应用到各个领域中，但当人类自豪地宣称已经理解了电的工作机制时，真实情况是，关于电仍存在着大量的未解之谜。但是，在本书中恐怕我们无论如何都得仔细钻研一下电学了，幸好，我们只需要一点基本概念就可以理解电在计算机中的工作原理。

手电筒无疑是大多数家庭里最简单的家用电器。拆开一个标准的手电筒，你会发现里面有一对电池、一个灯泡、一个开关、一些金属片，还有一个可以容纳这些元件的塑料外壳。

你只需要电池和灯泡就可以自己来做一个简单的手电筒了。当然，你还需要一些短的绝缘导线（末端剥去绝缘皮)，此外你还必须把这些元件连接起来，如下图所示。

## PDF_PHYSICAL_PAGE_INDEX=38 | PRINTED_PAGE=22

注意，在上图的右边，我们可以看到两个断开的线头，那就是开关。假设这两个电池没有问题，灯泡也没有烧坏，让这两个线头互相接触，就可以点亮灯泡。

刚刚完成的就是一个简单的电路。首先要注意的是，一个电路就是一个环路。只有从电池到导线，再到灯泡和开关，然后再通过导线回到电池的整个回路是连通的，灯泡才能被点亮。电路中出现任何的中断都将使灯泡无法正常发光。开关的作用就是控制这个断开的过程。

电路这种环状回路的特性说明电路中有某种东西在循环流动，或许有些像水流过水管那样。“水和水管”这个比喻经常被用来解释电流工作的原理，但是这种模型就如同所有其他的类比一样最终也无法自圆其说。在茫茫宇宙中，电不同于任何其他的事物，我们必须用它的术语来解释它。

研究电流工作原理的、最主流的科学理论叫做“电子理论”（electron theory)，这套理论认为电流是由电子的运动而产生的。

众所周知，所有的物质——我们所能看到和感觉到的事物——（通常情况下）都是由叫做原子（atom）的极其微小的东西组成的。每一个原子又由三种粒子构成：它们分别是中子（neutron）、质子（proton）和电子（electron）。你可以把原子的结构画成一个小太阳系，其中中子和质子被束缚在原子核内，而电子则围绕着原子核旋转，犹如行星围绕太阳旋转一样。

编码隐匿在计算机软硬件背后的语言

22

## PDF_PHYSICAL_PAGE_INDEX=39 | PRINTED_PAGE=23

我要提醒大家的是，如果你能搞到一个放大倍数很大的显微镜足以看清原子结构的时候，你会发现这张图与原子实际的样子并不一样。但是我们可以把它当做一个研究模型，方便我们进行一些探讨。

上图所表示的原子包含有3个电子、3个质子和4个中子，这表明它是一个锂原子。锂是112 种已知元素之一，这些元素都有一个1 到112之间的特定原子序数（atomicnumber)。原子序数表明了这种元素一个原子的原子核中所含的质子数，（通常）同时也是一个原子所含的电子数。锂的原子序数是3。

原子之间可以通过化学的方式结合形成分子（molecules）。分子的性质通常与组成它的原子大相径庭。例如，水是由水分子组成的，每个水分子由两个氢原子和一个氧原子(即 ${ \bf H } _ { 2 } { \bf O } \mathrm { ~ , ~ }$ 构成。很明显，水跟氢气或氧气都是截然不同的。同样，食盐的分子是由钠原子和氯原子构成的，显然这两种东西都没法让我们的炸薯条变得更加可口。

氢、氧、钠和氯都是元素。水和盐都是化合物（compound)。不过盐水是混合物(mixture）而不是化合物，因为水和盐都各自保留着它们自己的性质。

一个原子中电子的数日一般情况下与质子数目相同。但是在某些情况下，电子可能从原子中脱离。这就是电流产生的原因。

电子（electron）和电（electricity）这两个单词都是起源于古希腊文“ηλεkτρov(elektron)”，关于这个词，你可能会猜测它是表示“微小而又无形的东西”之类的意思。

4 手电筒的剖析

23

下一段：[继续读取](https://workshop.closeclaw.top/api/ai/read/38270854-596f-4a26-8183-db8c968c6020.md?start=40&limit=10)
