文字如何转变成了数字

随着科技的发展,大概在20年以前,我们(特指咱们中国老百姓)步入了真正的数字时代。在此之前,大多数人对电脑的认识可能是……“那是什么东西”……当然,现在绝大部分人只是知道了计算机,而并没有深入考虑IT技术对我们的影响,将来会有怎样的变革。

作为一个计算机爱好者,我觉得自己还是有义务稍利用闲暇时间普及一些知识,给亲戚朋友尤其是老年人(包括我的父母)看看,这比成天阅读 “不转不是中国人”、 “他说了一句话举国震惊”、“你所不知道的25个小技巧”、 “只因一句话她杀死了自己的婆婆”之类子虚乌有的东西强一些吧。

我们用微信很大程度上是为了互相交流,了解世界。微信里看到的内容大概有3类:文字、图片、声音(视频实际上是连续的图片加上声音)。今天我们讲讲最基本的东西:日常书写阅读的文字,是怎么变成“数字”,在手机、网络、计算机里边存储的。


第一个问题:为什么要把文字变成数字?#

计算机和网络技术,以及我们用的手机,都是建立在数字电路的基础上,只能处理和传输开、关这两种信号,对应成数字,就是1和0。如果让计算机和小朋友比数数,结果会是这样的:

小朋友数:0、1、2、3、4、5、6、7、8、9、10、11……;

计算机数:0、1 …… 注意,下一个不是2,计算机脑子里没有2的概念,它的手指头不够用,到这里就要进位了,就是 10,你没看错,就是数10,不过不是我们数的“十”。完整的计算机数数就是:0、1、10、11、100、101、110、111、1000……这些数翻译成我们日常使用,就是0、1、2、3、4、5、6、7、8……

我们日常用的叫做十进制,到了9之后,手指头不够用才会进位变成2位数,以后都是逢十进一,计算机用的是不同的二进制,只要大于1就必须进位了。但本质上这两种进制都能准确表示数量,只是人类不习惯。有一天,我们挣了100元,在计算机的脑子里,就是1100100元(发财了),但实际表示的都是十进制数量的“100”。

计算机本质上是一个存储、处理数字的机器,那么在计算机(包括智能手机等)产生的任何信息,都一定是以数字的形态存在的。所以我们用以学习交流的文字,在计算机上也是以数字存在的。 网络也是传输这些数字的信号。也许将来会有不是基于数字的新技术,那我们将会迎来另一次技术革命。


第二个问题: 文字和数字是怎么对应起来的

那么好,既然计算机只能认识和处理数字,我们要和计算机交流,就需要一套方法,把我们用的文字转化成数字。

实际上,最早的计算机只是用来计算的,工程师们用穿孔纸带和计算机交流,怎么交流呢?纸带上固定位置打孔就是1,不打孔就是0。工程师们把长长的纸带塞到计算机里,用最原始的二进制方式和计算机交流……一旦有一个孔打错了,也许100多斤纸带就浪费啦。

能想到的,最好的数字和文字对应方法是什么呢?其实一点也不高级,大家都能设计出来,那就是给每个文字编写一个号码。比如“爱”的号码是0001,“我”的号码是0002,“中”的号码是0003,“华”的号码是0004……以此类推,那么计算机只需要记录 “0001000200030004”,二进制工程师们就知道是“爱我中华”的意思了。

既然这文章是面向老年人的,我想老年人一定见过之前老手机上短信乱码的情况,这就是一种编码错乱现象。上面的“0001000200030004”本来是“爱我中华”,谁知道由于各种原因丢了最前面的3个“0”,就变成了“1000200030004”,这个时候对应的文字就不一样了,而且有可能不是字。所以会出现“你说,xxx给你发的暗号是什么意思”之类的误会。

给文字做编码有几十年的历史了,现在还在不断改良和探索。全球的语言文字有很多种,英文的“A”和汉字的“爱”可能是一个“0001”编码;英文很少,大小写字母加上一些符号都不超过几百个,大概4位编码就够了。常用汉字就是几千个,如果搬出康熙字典,不认识的汉字至少有几万,5位编码都不一定能全包括。不同语言之间发送信息很可能会出现问题。

计算机问世最初没有人好好设计这件事,大家各做各的。甚至我们国内不同的汉字编码都有若干套。后来就要感谢各个国家的标准委员会,他们不断的完善本国编码,并与其他各国同行互通有无,经过三十几年的努力,最终形成了一些事实上的标准,我们目前大部分用的叫做UTF编码,这是一个全球性的标准,囊括了各国语言……从而保证了几乎全球人民都能看到不乱码的本国和外国语言。

从某种意义上讲,这种统一标准的过程不仅仅是技术过程,也是促进全球化的一种助力,离世界大同又更近了一步不是吗?

上面的编码都是举例子,实际比这个要复杂


第三个问题: 既然文字是以数字表示的,为什么手机里看到的是汉字?

计算机和手机屏幕……本质上……是一张画,但是这张画受到控制,会以非常快的速度闪烁变换(至少每秒几十次吧),闪的很快我们察觉不到(以后少看点手机,要看也开着灯)。我们看到的汉字是“画”在屏幕上的。

那么手机里的“编码”怎么画到屏幕上变成“汉字”呢?大家一定想到了,手机里还存着另外一个东西,那就是“编码”和字的“画法”对应关系。要在屏幕上显示“中”字,该怎么办?手机先看到编码“0003”,再根据“0003”找到对应的“画法-0003”:先画个方框,不能太大,中间偏上,再画一竖线,上下要超出去。这就是个“中”字嘛……

而存放“0003”和“画法-0003”的这个东西,叫做“字体”。说起这个,想起了一些:颜真卿米芾庞中华毛氏狂草仿宋黑体。哈哈,这件事上计算机和人差不多。我们认识“中”字,并不依赖于某种字体,无论你写的中,还是我写的中,虽然字体不一样,在认识汉字的人眼里都是”中”;无论计算机的“0003”,还是手机的“0003”,在数字世界都是“0003”,需要和人类交流的时候,计算机运用“字体”,把“0003”画成“中”而已。(“为什么我电脑上的大黑体到你这里不显示了?”、“你做的网页字体不对”—其实原因都是:别人有“大黑体”而你电脑上没有,为了不出问题,电脑只好随便用了一种其它字体)

以下内容很高级,以下内容很高级,以下内容很高级。

很多人用手写输入(或者笔画/拼音),估计会有一个疑问,我在屏幕上写了一个“中”字,会显示出一排和“中”差不多的字让我选,计算机是怎么反过来,从笔画(拼音)找到字本身呢?这确实是个很高级问题,读懂了我下面这些话,你也可以和人吹嘘“人工智能”了。

无论你是手写输入写的“中”,还是笔画输入的“中”(竖、折、横、竖),还是拼音输入的“中”(zhong),计算机或手机都会把你的操作,生成一个叫做“模式”的东西,然后从另外一个地方取得__《“模式”“编码”对应表》__,拿去比较,看哪个模式最接近你刚刚手写的“模式”,然后找出一堆比较相似的“模式们”,拿到对应的“编码们”,拿着这些“编码们”去“字体”查找汉字们的画法,最后把这些候选的汉字“画”到屏幕上,供你选择。

  • “看,我这么潦草的字体手机都能认识,真神奇!”
  • “拼音输入法真差劲,这么多同音汉字”
  • “哈哈,笔画输入越多,我想要的字越准确”。

用能理解的话就是:你在手机上画一些笔划?手机并不知道你写的是什么,它只是根据样子“觉得”像是“口”“中”“田”……那好,都列出来,让你选一个。随着你用手写输入越多,手机会通过“模式”,把你书写的习惯和你选的汉字联系起来,提升选字的准确率。从这个角度看,计算机是不是开始猜测你的行为了?

“模式”这个东西就有点意思,模式让计算机能认出汉字,也能让计算机认识什么是“猫”,还能学会“驾驶汽车”。今天,“模式”已经达到了非常牛逼的地步,代表人工智能最高成就的谷歌的围棋程序“阿尔法狗”,去年下过了韩国李世石,前一段时间又横扫中韩棋坛连胜40场……这是“模式”的进步,也是计算机智能的进步(其实本质上是我们对人类自身认识的深度在增加)。将来会有专门的文章说说计算机和人类智能,希望大家能够坚持看下去,特别是希望我能坚持写到那一天。


最后:很高兴我治疗了大家的失眠,祝各位朋友晚安

题目是不是应该改成《微信因为她才火爆全球,不转不是中国人》……我非常诚恳的希望看过的朋友能从各方面能给我一些建议,不过,目前只能通过关注公众号,给公众号发消息进行留言。