我们在《漫话:如何给女朋友解释为什么计算机只认识0和1?》中介绍过,在计算机世界中,只有0和1两个字符,所有的数据都需要通过二进制表示,如52个英文字母(大写+小写)、阿拉伯数字以及常用的符号等在计算机都需要通过二进制来表示。
所以,我们在电脑上看到的所有字符,都需要通过一种方式将他们装换成二进制表示。
那么转换的这个过程就需要通过字符编码做映射,我们在《漫话:如何给女朋友解释什么是"锟斤拷"?》中介绍过,为了将字符转换成二进制,有很多字符编码的标准被制定出来,其中包括Unicode、GBK等。
那么,有了字符编码之后,计算机就可以认识我们想输入的字符了,但是想要把他展示出来还是比较复杂的,大致流程如下:
当我们在键盘上输入一个字符之后,计算机会通过Unicode,将这个字符转换成二进制。
接下来,通过获得到的Unicode编码值,查询字体文件中的Charmap,把编码值转换成字形索引。
一旦你获得了字形索引,你便可以装载对应的字形图像。
之后,就可以对这个字形图像进行图形渲染,然后就可以显示在显示器上面了。
大家或许对字形索引、图形渲染这些不是很了解,没关系,大家只需要知道,一个字符想要在电脑上显示出来,需要以下三个条件:
1、输入法支持输入这个字符
2、Unicode编码支持将这个字符转成二进制
3、计算机上安装的字体中包含这个字符
由于汉字数以万计,电脑键盘不可能为每一个汉字而造一个按键。因此,人们需要替汉字编一套输入码(检索出汉字的代码),用数个键来输入一个汉字。而把多个按键输入转换成汉字的工具就是中文输入法。
而目前市面上比较常见的中文输入法,大多数都是采用的GBK的作为字符集的。
GBK共收录21886个汉字和图形符号,其中汉字(包括部首和构件)21003个,图形符号883个。但是中文汉字远不止2万多,所以,很多生僻字是无法通过输入法打出来的,如"Biángbiáng面"中的biáng字。
另外,还有些输入法使用了比较全的字符集(Unicode等),如郑码、仓颉等输入法是可以输入一些生僻字的。
字符能够在电脑上显示,还有一个前提就是他可以被翻译成二进制,也就是说,如果一个字符没有被Unicode收录的话,是无论如何都无法显示的。
所以,目前很多汉字的生僻字,还有一些emoji都是无法打出来的。
但是Unicode还是在不断更新的,最近一次更新是2020年3月10日,刚刚发布了Unicode 13.0,Unicode 13.0共增加了5,930个字符,目前共有143,859个字符。
在Unicode 13.0的CJK 统一表意汉字的扩展G区中,已经收录了"Biángbiáng面"中的biáng字,可以看到,其对应代码为30EDD何30EDE。
中日韩统一表意文字(CJK Unified Ideographs),CJK 是中文(Chinese)、日文(Japanese)、韩文(Korean)三国文字的缩写,目的是要把分别来自中文、日文、韩文、越文、壮文中,本质、意义相同、形状一样或稍异的表意文字于ISO 10646及Unicode标准内赋予相同编码。
但是虽然Unicode 13.0已经推出了,但是因为文字编码是要内嵌到操作系统中的,所以还需要操作系统底层也做更新才能兼容。
如果Unicode中已经包含了某个生僻字,那么在展示的时候,就会通过得到的Unicode编码值,查询字体文件中的Charmap,把编码值转换成字形索引。
但是,如果预装字体中不包含某些字符的话,也是无法展示的。
也就是说,如果输入法可以兼容最新版的Unicode 13.0,并且操作系统也升级到了最新版的Unicode编码,也不意味着直接就可以显示像"biáng"这样被最新收录的生僻字。
因为这还依赖于操作系统中的字体是否包含这个字符。目前市面上有些商业字体是可以支持CJK中的很多扩展字符的。
相信随着操作系统和输入法更新到新版本的Unicode字符集之后,会有部分字体开始支持新的字符的。
目前有很多家长愿意给孩子起名的时候使用一些生僻字,尤其是一些有美好寓意的生僻字更是经常被使用,如寓意美好的頔。
据新闻报道,某大学生的名字中就曾经使用过"由页"这个字,但是这个字的繁体字“頔”可以打出来,但是简笔用拼音、五笔输入法都打不出。
奇怪的是,当初在公安系统登记名字的时候,却登记成功了,但是在日后的生活中,这位大学遇到了很多阻碍,如支付宝无法实名认证、无法实名制购票、甚至无法报考高考等问题。
有些时候,在一个体系内可以打出来或者显示的生僻字,在另外的体系内就有可能无法显示。所以,对于生僻字的使用,还是要慎重!