作者 | 漫话编程
来源 | 漫话编程(ID:mhcoding)
电脑如何显示字符
我们在《漫话:如何给女朋友解释为什么计算机只认识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
字符能够在电脑上显示,还有一个前提就是他可以被翻译成二进制,也就是说,如果一个字符没有被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字符集之后,会有部分字体开始支持新的字符的。
生僻字带来的不便
目前有很多家长愿意给孩子起名的时候使用一些生僻字,尤其是一些有美好寓意的生僻字更是经常被使用,如寓意美好的頔。
据新闻报道,某大学生的名字中就曾经使用过"由页"这个字,但是这个字的繁体字“頔”可以打出来,但是简笔用拼音、五笔输入法都打不出。
奇怪的是,当初在公安系统登记名字的时候,却登记成功了,但是在日后的生活中,这位大学遇到了很多阻碍,如支付宝无法实名认证、无法实名制购票、甚至无法报考高考等问题。
后来公安系统的工作人员表示:公安人口信息库专用字库是最全的,甚至包括了不少少数民族的文字,设有生僻字库。但教育部门、银行、航空公司、房产等部门,却没有同步使用这套字库,无法共享很多生僻字,就会出现一系列问题。
有些时候,在一个体系内可以打出来或者显示的生僻字,在另外的体系内就有可能无法显示。所以,对于生僻字的使用,还是要慎重!
关于作者:漫话编程,是一个通过漫画 音频的形式讲解枯燥的编程知识的公众号。致力于让编程变得更有乐趣。
☞阿里云加码 2000 亿,再“出征”新基建!
☞看似毫不相干,哲学与机器学习竟有如此大的交集?
☞文科出身敲出 Instagram,被小札“挤”走,建新冠追踪网站,这个程序员有点牛!
☞降低预测过程计算成本,这些NLP模型压缩方法要知道
☞这些常见的分布式存储系统,你是否都了解?
☞京东智联云云原生实践,告诉你何为监控和日志的黄金法则
电脑上打字只显示字母打不出汉字是怎么回事?
电脑打不出汉字有几种原因:一、键盘故障,切换中英文的键失灵。你观察一下切换时,输入状态栏中、英变换是否正常?
二、输入法故障。换一种输入法试试。
三、如果上面的情况都正常,那就是系统故障,很可能是注册表问题。可按如下方法排除:
在运行中输入【regedit】,然后在注册表编辑器定位到特定位置,查找【ctfmon.exe】键值,然后设定值,如果没有则需要新建【ctfmon.exe】的【字符串值】,最后重启电脑之后即可设置生效。以下是详细介绍:
1、单击【开始】,然后点击【运行】;在运行框内输入【regedit】,点击确定打开注册表编辑器;
2、在窗口左侧依次定位到HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionRun;在窗口的右侧查找名字为【ctfmon.exe】键值,选定它;
3、双击【ctfmon.exe】弹出编辑窗口,将其值设置为【C:WINDOWSsystem32ctfmon.exe】然后点击确定;
4、如果在窗口的右侧没有找到【ctfmon.exe】键值的话,就在空白的地方单击鼠标右键,依次选择【新建】,【字符串值】,并将其命名为【ctfmon.exe】;双击【ctfmon.exe】弹出编辑窗口,并将其值设置为【C:WINDOWSsystem32ctfmon.exe】然后点击确定;
5、退出注册表编辑器,在重启电脑后设置生效。