正文
现在国际上比较通用的语言是英语,英语的组成符号也不太复杂,所以选择英语作为数字码的尝试语言。
既然目的是用纯数字表示英语,那就不应该出现数字以外的其他符号, 只应该有0、1、2、3、4、5、6、7、8、9,这10个数字符号。 现在很成熟的有二进制方式,但二进制因为抽象度过高,导致人类不可直接解读; 还有就是摩斯密码,摩斯密码重点使用领域是在电报行业,解读成本也比较高。 这里要尝试的就是选择一种解读成本比较低的方式,同时也是一种比较新颖的方式。
英文字母代表码:
a b c d e f g h i j
4 5 6 7 8 9 10 11 12 13
k l m n o p q r s t
14 15 16 17 18 19 20 21 22 23
u v w x y z
24 25 26 27 28 29
英文字母下面就是相应的数位代表码。如m的代表码是16、y的代表码是28等。
另外再加几个特殊描述码:
0 表示空格
00x00 表示数字(取消这条规则)
3xx 预留为各自语言拓展使用
01xx 描述语言类型
02、03 保留位
0:表示空格,就是单词与单词之间的留白,应该很容易可以看懂,就不多说了。
00x00:表示数字,就是数字夹在00之间,如123的数位代表码是0012300。
3xx:预留为各自语言拓展使用,这个是说每个语言应该都有一些特殊符号,这里就是为这些特殊符号预留的。 第一个x表示后面有几位数字,第二个x就是具体的多位代表码, 如“,”的完整数位代表码是33001,“.”的完整数位代表码是33002,“?”的完整数位代表码是33003, 后面还会具体阐述,这里暂时跳过。
01xx:描述语言类型,因为语音不止英语一种,还有许多其他语言,需要辨别出不同语言数位码就需要有各自的数位码描述, 既然是语言类型描述,那就只应该出现在最开始位置。第一个x表示后面有几位数字,为了日后扩充被描述的目的语言, 这个数字可以不断增大,不过最大到9,应该完全够用了;第二个x就是具体语言的代表码。 如英语的完整数位代表码是013001,汉语拼音的完整数位代表码是013002,其他语言数位代表码待定。
02、03:保留位,因为2在英文字母代表码中出现过,3在语言拓展中出现过,不适合再次出现,所以要保留起来。 你可能会说描述语言类型的01xx中的1在英文字母代表码中出现过,也不应该再次出现,需要说明的是01xx只会出现在一长串数位码的最开头, 而且开头不应该有空格,也就不会出现0,所以1在这里不会产生歧义,可以使用。
看到这里,你应该基本看明白了。我们来举个例子。
“hello world 365?”的数位码是:0130011181515180261821157003650033003
大家可以尝试着按照上面的规则解读一下这个数位码是不是:hello world 365?
下面完善一下3xx拓展码。
我们都知道英文字母还有大写,所以我们需要把英文大写字母的拓展码标识出来:
A B C D E F G H I J
33004 33005 33006 33007 33008 33009 33010 33011 33012 33013
K L M N O P Q R S T
33014 33015 33016 33017 33018 33019 33020 33021 33022 33023
U V W X Y Z
33024 33025 33026 33027 33028 33029
再就是英文中还有标点符号,我们也需要把英文中标点符号的拓展码标识出来:
, . _
33101 33102 33103
' " ` ^
33121 33122 33123 33124
? ! ; : - ~ / | \
33141 33142 33143 33144 33145 33146 33147 33148 33149
@ # $ % & *
33150 33151 33152 33153 33154 33155
< > ( ) [ ] { }
33181 33182 33183 33184 33185 33186 33187 33188
因为“,”、“.”、“?”,这三个符号比较常用,所以提前复制一份,以减小记忆负担:
, . ?
33001 33002 33003
再就是一些算术运算符,只举出常用的几个,其他待补充:
= + - * /
33200 33201 33202 33203 33204
上面就把正常使用范围内的数位码规则基本讲完了,大家可以思考下数位码的使用场景。
最后给一段数位码,大家试着解读下内容:
01300133012011425804072184160231142301817807428023111222
01742312181702612151502112228024190417701512258018242302
31180232124801684171217100189012232206218873314433122330
26801118157023118228023212423112202318058022815933145825
12781723331012311423041515016817042180621842387082024415
3310233122
拓展
在上面的设计中,发现一个悖论:用变长数字表达数字本意无法快捷实现。
如:00x00,表示1001001,就是00100100100。即将不知道数字结束位是那个。
也想过用这种方式:
00x0y00
x表示y有多长,如:123,就是003012300。但又发现了问题,如:001010010100…00,这个怎么解读呢?
说到这里,应该发现这个问题暂时是没法解决的,或许在数位码中应该取消用数字表示数字: 一方面数位码的初衷是用数字表示语言,这个目的已经达到,就不再增加额外鸡肋的功能了; 另一方面各个语言中都有自己表达数字的方式,如英语中2的表达是two等, 我们只需要在用到2的时候写成two就可以实现别人能理解的目的了,而数位码中又可以准确的表达two。 所以可以取消00x00表示数字这种会引起歧义的表达规则。