在上一篇文章聊了 摩尔斯电码 之后,接下来该聊聊博多码(Baudot code)了。

博多码

正如摩尔斯电码是源于电报,博多码也是因电报而生,而最早使用博多码的正是『博多式电报机』。

博多式电报机 』由 Emile Baudot 发明,也得名于此, Baudot code 则是博多式电报机所使用的编码,使用 5 个 bit 进行编码,包含了两个字符集。

其实应当称之为 5 波特(baud)更为合适

基础介绍

编码表

先来看下博多码的编码表,搜索 Baudot code ,我们可以找到这样一张草案图:

显然,这并不是最后被使用的那一份,毕竟它存在着巨大的缺陷:没有数字 和常用符号。

26 个英文字母 + 10 个数字 + n 个符号,那至少要 36 个状态了,5bit 最多表示 32 种状态,不够用啊。

这也就是为什么 Baudot code 有两个字符集(字符平面)了:

  • Letter 字符集主要存字母
  • Figure 字符集则主要是数字和符号

两个字符集(字符平面)之间,可以通过特殊的切换字符 letter shift figure shift进行转换

其实这已经是在事实上将编码的长度从 5bit 拓展到了 6bit ,但当时由于机械结构复杂度方面的原因,5bit 已经是极限,所以才引入了这个策略。

这个状态转换,使得用 5bit 编码成为可能,但是也隐含了一个 『坑』,会在下文详述。

完整的博多码(英文版,法文版略有不同)

image-20200302222914173

博多式电报机

硬件结构

有没有注意到这个表格里,第四第五列是放在左边的,中间还有空列?

看一下博多式电报机的样子就明白啦,它是使用类似钢琴键的结构进行输入的:

这里还有一个小细节,五个元音 A E I O U 以及半元音 Y 的输入,都不需要使用左手,单靠右侧三个按键即可输入,这其实也是在尽量压缩常用字符的编码,为发报员减负。

附:博多式电报机的工作情况,可以参考这个视频:Emile baudot printing telegraph ( teletype )

博多式电报机这种输入方式,完全不同于现在常用的 QWERT 键盘,而是更接近于我们在各类程序员笑话中见到的那个 Super Coder 2000 键盘:

这样的键盘在输入效率上,确实比不上 QWERT 键盘,但是相比摩尔斯电码,其实已经进步了很多,毕竟现在只需要 『一次』输入,就可以发出一个字符了。

那么,它的内部结构是如何实现的呢?

这里我翻到一份文档,里面介绍了 『多路复用』的博多式电报机的结构,可以拿来参考一下:

如上图,因为原图是四路复用,所以只需要看四分之一圈即可,两张图分别是接收结构和发送结构。

可以看出,其实基础原理不算特别复杂,就是一个电刷在旋转,依次读取了 12345 四个琴键上的电平。

听起来很容易,但也带来了新的挑战,发报员需要聆听机器的信号来了解自己现在是否可以发报了。

其实这里还涉及到博多式电报机引入了负电压的情况,恕不赘述

在上面介绍为什么博多码选择了 5bit 的时候,提到这是因为硬件结构复杂,但是从上面的结构图来看,似乎并不是很复杂的样子,这主要是因为它的译码部分。

接收译码

看完了上面的编码表和硬件结构,基本上就理解了博多码是如何通过博多式电报机进行发送的了。

那么接收的时候怎么办呢,我们先来看一下摩尔斯电码当时是怎么做的:

最开始的时候,摩尔斯电码其实是使用这样的纸带进行接收记录的,只是因为收报员发现,对于滴滴答答的声音来说,直接听声音比直接看纸带要容易多了,于是才转变为了现在的形态。

博多码方面,因为每个字符都是 5bit,似乎更适合使用纸带了,但是事实上,博多式电报机走了另一条路:它直接输出字符。

博多式电报机的输出结构上,有一个很精巧的凸轮结构,上面印有所有的可打印字符,通过这个凸轮,它可以直接将收到的电平信号转换以字符的形式打印在纸带上。

还记得我们前面说博多码之所以只有 5bit,是因为受限于机械结构嘛?没错,并不是受限于键盘那边的结构复杂度,而是受限于这个凸轮实在不能做的更大了。引入 Shift 之后,凸轮被分成了两个,互相切换使用。

更细节的结构,在这篇文章有更完整的描述,可以参考。

编码特点

看完了机器,现在我们回过头来继续说博多码自身的特点。

定长编码

相对于摩尔斯电码,博多码最大的一个改变就是:定长编码。

将每个字符的编码定长为 5bit ,使得编码解码都方便了不少。

编码侧来说:

因为编码定长,就可以根据编码长度直接制作出相应的『键盘』,减轻发报员的疲劳程度。

同时,因为编码已经定长,不需要像摩尔斯电码一样,因为考虑编码效率采用霍夫曼树。

博多码只给元音开了小灶,如果抽去元音不看,博多码的编码其实是有规律可循的,也更方便记忆。

image-20200323182355636

另外,在后期也出现了使用纸带作为发送内容载体的博多式电报机,这其实也得益于固定编码长度。

解码侧来说:

定长编码带来了巨大的便利,只需要确保双方同步,那么接收方在解码时就可以从容的『按组解码』。

这也大大方便了机械解码结构的设计(这也是为什么博多式电报机可以自带打印结构)。

多字符集

前面提到,博多码为了在 5bit 里塞入超过 32 个字符,使用了 Shift 来切换两个不同字符集(字符平面)。

从好的一方面来讲,在机械结构限制下,这样使用 5bit 虚拟出了 6bit 编码的效果,拓展了字符集的大小。

但是,这样其实也带来了新的问题,因为原本字符编码这件事是 『无状态』的,加入 Shift 之后,编码解码一下子变成了 『有状态』的了。

而状态的转换,需要做好约定,比如说:

刚开始发送的时候,应该是哪一种状态?

发送完一段电码之后,是否需要重置到某个状态?

这个问题对大家的困扰,一直延续到了 ITA2 时代。

评价

毫无疑问,博多码在编码历史上绝对是非常重要的,它在后期也被标准化为 ITA1 编码(虽然没什么人用)。

优点

  • 定长编码,飞跃性的改进
  • 努力拓展了字符集
  • 改善了摩尔斯电码的输入方式
  • 直接输出字符,便于查阅

缺点

  • 引入 Shift 的概念,导致兼容性问题
  • 不支持大小写字符区分
  • 不支持换行等排版字符(但是有类似退格的操作符)

参考资料

为了写这篇文章,翻阅各种网站查阅了许多资料,在此一并列出,读者有兴趣可以进行参考:

文章目录