作者 | 漫话编程

来源 | 漫话编程(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字符集之后,会有部分字体开始支持新的字符的。

生僻字带来的不便

目前有很多家长愿意给孩子起名的时候使用一些生僻字,尤其是一些有美好寓意的生僻字更是经常被使用,如寓意美好的頔。

据新闻报道,某大学生的名字中就曾经使用过"由页"这个字,但是这个字的繁体字“頔”可以打出来,但是简笔用拼音、五笔输入法都打不出。

奇怪的是,当初在公安系统登记名字的时候,却登记成功了,但是在日后的生活中,这位大学遇到了很多阻碍,如支付宝无法实名认证、无法实名制购票、甚至无法报考高考等问题。

后来公安系统的工作人员表示:公安人口信息库专用字库是最全的,甚至包括了不少少数民族的文字,设有生僻字库。但教育部门、银行、航空公司、房产等部门,却没有同步使用这套字库,无法共享很多生僻字,就会出现一系列问题。

有些时候,在一个体系内可以打出来或者显示的生僻字,在另外的体系内就有可能无法显示。所以,对于生僻字的使用,还是要慎重!

关于作者:漫话编程,是一个通过漫画+音频的形式讲解枯燥的编程知识的公众号。致力于让编程变得更有乐趣。

【END】

更多精彩推荐

☞阿里云加码 2000 亿,再“出征”新基建!

☞看似毫不相干,哲学与机器学习竟有如此大的交集?

☞文科出身敲出 Instagram,被小札“挤”走,建新冠追踪网站

☞降低预测过程计算成本,这些NLP模型压缩方法要知道

☞这些常见的分布式存储系统,你是否都了解?

☞京东智联云云原生实践,告诉你何为监控和日志的黄金法则

你点的每个“在看”,我都认真当成了喜欢

漫画:为什么生僻字计算机上打不出来,或者打出来也无法显示呢?相关推荐

  1. 漫话:为什么生僻字计算机上打不出来,或者打出来也无法显示呢?

    电脑如何显示字符 我们在<漫话:如何给女朋友解释为什么计算机只认识0和1?>中介绍过,在计算机世界中,只有0和1两个字符,所有的数据都需要通过二进制表示,如52个英文字母(大写+小写).阿 ...

  2. php将上传的图片转为base64,html5实现把上传的图片转成base64编码在显示(代码实例)...

    本章给大家介绍html5实现把上传的图片转成base64编码在显示(代码实例).有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助. 首先我们来详细的看一看base64编码: 什么是bas ...

  3. [html] 页面上的登录表单记住了密码(显示星号),但我又忘了密码,如何找回这个密码呢?

    [html] 页面上的登录表单记住了密码(显示星号),但我又忘了密码,如何找回这个密码呢? 将密码input的type改为text或者为空,则会显示输入框值. 个人简介 我是歌谣,欢迎和大家一起交流前 ...

  4. Asp.Net 上传大文件专题(4)--利用ajax技术显示上传进度

    ====================================================== 注:本文源代码点此下载 ================================= ...

  5. wordpress搜索不了中文linux,WordPress上传带中文汉字名称的图片不显示的解决办法...

    以上是WordPress上传带中文汉字名称的图片不显示的情况,正常上传成功的话,在上图两个地方都会有图片缩略图显示.相信很多WordPress装载linux系统上的朋友都会遇到这样的错误. WordP ...

  6. esp32-cam拍照上传,app inventor 制作安卓app实时显示

    esp32-cam拍照上传,app inventor 制作安卓app实时显示 1.ESP32-cam开发环境配置 2 .程序下载 连线 3. 控制台查看图片 第四.app 开发 1.ESP32-cam ...

  7. python爬虫篇:为了追个漫画我居然用上爬虫,别人说我不讲武德

    目录 1.前言 2.采集目标 3.工具准备 4.效果展示 5.项目思路解析 6.简易源码分享 7.总结 1.前言 大家好,我是辣条,只能看不能吃的辣条~ 最近在追xx动漫,但是没看几章你们懂的,就弹出 ...

  8. 世界互联网大会上发布的《中国互联网发展报告2020》显示——中国人工智能专利申请数跃居世界第一...

    文章来源:文汇报,图文如有侵权,请联系小编删除 世界互联网大会会址乌镇互联网国际会展中心外景.新华社记者 黄宗治摄 文汇报乌镇11月23日专电(特派记者徐晶卉)过去一年,5G.操作系统等技术取得突破, ...

  9. asp.net 上一条和下一条记录的显示

    这里我用的是input标签跳转页面的: 前台aspx页面中: <input class="btn" id="btnSetForm" type=" ...

最新文章

  1. CCF CSP201709-1打酱油
  2. PHP垃圾回收深入理解
  3. 配置 Hdp 4 Window 中的一些问题
  4. 杭电4515小Q系列故事——世界上最遥远的距离
  5. MySQL5.7 编译安装
  6. js 判断 是否在当前页面 当前页面是否在前端
  7. 中关村海龙大厦-买本上当经历给大家提个醒
  8. 华为路由器支持ftp服务器,华为路由器FTP配置详解
  9. Chapter3 Language Basics
  10. 「CF1154F」Shovels Shop【背包DP】
  11. linux自动清理磁盘日志的一种方案
  12. IntelliJ IDEA 2020.3.3 遇到Cannot resolve table ‘goods’
  13. MYSQL/ORACLE/SQL SERVER的默认端口号
  14. 搭建Mantis 缺陷管理系统
  15. ubuntu下如何设置环境变量
  16. .NET-15-正则替换
  17. Python—numpy模块下函数介绍(一)numpy.ones、empty等
  18. 太阳、地球、月球公转与自转
  19. selenium版本低导致运行报错打不开浏览器问题
  20. 仿屏保纯as随机飘动气泡

热门文章

  1. Redis笔记5-redis高可用方案
  2. 淘宝爬取某人的所有购物订单
  3. saltstack远程操作WINDOWS的POWERSHELL脚本
  4. 在线编辑word文档 可保存到服务器(转)
  5. HDU.1010 Tempter of the Bone
  6. 2021李宏毅机器学习课程笔记——Auto Encoder
  7. 【实验记录】EA-MLP(演化算法--全连接神经网络)实验记录
  8. 解决矩池云GPU显存未释放问题
  9. 《统计学习方法》—— 朴素贝叶斯方法、详细推导及其python3实现(一)
  10. linux g++开启C++11/14支持