可读数字语言:数位码


现在语言类型很丰富,种类也及其繁多,这里尝试一种用纯数字组成的可读语言。


正文

现在国际上比较通用的语言是英语,英语的组成符号也不太复杂,所以选择英语作为数字码的尝试语言。

既然目的是用纯数字表示英语,那就不应该出现数字以外的其他符号, 只应该有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表示数字这种会引起歧义的表达规则。






参考资料


返回