把「HELLO」转成摩尔斯电码,得到的是 .... . .-.. .-.. ---。中间那些空格从哪来的?为什么不能写成 ......-...-..---?答案在于摩尔斯电码不只是一组符号,它还包含一套关于时间间隔的规范。间隔错了,接收方就无法正确还原内容。
三种间隔
真实的电报有严格的时间规范,所有间隔都以一个点的时长为基本单位。
| 元素 | 时长 |
|---|---|
| 点 | 1 单位 |
| 划 | 3 单位 |
| 同一字符内符号之间 | 1 单位 |
| 字符与字符之间 | 3 单位 |
| 单词与单词之间 | 7 单位 |
可以看到,这里的区别是时间长度,不是符号本身。发送时,点持续 1 个单位时间,划持续 3 个单位时间,然后按不同的间隔停顿时长来区分边界。
接收方就是靠停顿的长度来判断边界的:停顿 1 单位说明同一个字符还没发完,停顿 3 单位说明一个字符结束了,停顿 7 单位说明一个单词结束了。
纯文本怎么表达
在纯文本环境里,无法表达「时间长度」,所以需要用可见符号来替代间隔。
通行的约定是:
字符内的符号:连在一起写,用空格分隔不同字符,用 / 分隔不同单词
举例,HELLO WORLD 的编码是:
.... . .-.. .-.. --- / .-- --- .-. .-.. -..
其中:
....是 H,四个点连写,中间不加空格- 各个字符之间用单个空格分隔
/前后的空格表示单词边界
也可以把单词间隔写成更明显的三斜杠 ///,或者用竖线 | 表示字符间隔。这些变体在不同工具和不同场景里有使用,关键是发送方和接收方约定一致。
间隔错了会怎样
间隔规范不是形式主义,错了会直接导致解码失败。
如果字符间隔设成和符号间隔一样(都用单空格),解码时无法区分「一个字符内的多个符号」和「多个字符」。比如 .... 是 H,但如果把 .... 拆成 . . . .,解码器会看到四个独立的点,每个点代表 E,结果变成 EEEE。
如果单词间隔设成和字符间隔一样,解码器无法判断哪里是单词边界,所有字符会被连成一串。
如果符号之间的间隔太长,接收方可能误认为字符已经结束。这在人工收报时是常见错误。
所以在文本表达里,一条基本规则是:字符间隔和单词间隔必须使用不同的符号。用空格表示字符间隔、用 / 表示单词间隔是最常见的做法。
数字的电码为什么好记
顺带说一个有意思的设计。数字 0 到 9 的电码都是五个符号,而且排列有规律:
0 -----
1 .----
2 ..---
3 ...--
4 ....-
5 .....
6 -....
7 --...
8 ---..
9 ----.
规律是:从 0 到 5,划的数量从 5 递减到 0,点的数量从 0 递增到 5;从 5 到 9,再反过来,点的数量递减、划的数量递增。
记住这个规律,就不需要单独背 10 个数字的电码了。这也体现了摩尔斯电码在设计时的考量——让常用的内容更容易记忆和发送。
发送速度的影响
间隔规范还涉及发送速度。规范里的「1 单位」具体是多少毫秒,取决于发送速度。
专业报务员的速度可以用 WPM(每分钟单词数)来衡量。速度提高时,单位时长相应缩短,所有间隔按比例缩短。但比例关系不变——点永远是 1 单位,划永远是 3 单位。
人工发送时,间隔很难做到精确,所以接收方需要靠经验判断。自动发送(用电子键或软件)则能保持精确的比例。这也是为什么自动化设备出现后,电报的准确率明显提升。
检查清单
- 摩尔斯电码的间隔以「一个点的时长」为基本单位
- 点 1 单位、划 3 单位、字符内间隔 1 单位、字符间 3 单位、单词间 7 单位
- 纯文本里用空格表示字符间隔,用
/表示单词间隔 - 字符间隔与单词间隔必须使用不同符号,否则解码歧义
- 符号连在一起写表示同一字符,不要在每个符号之间加空格
- 数字 0—9 都是五个符号,按「划递减再点递减」的规律排列
- 发送速度变化时所有间隔按比例缩放,但比例关系不变