不确定这样问合不合适,但是以下几种证据让我觉得 unicode 字符集应该是物理存在于磁盘上。
- 在命令行中执行
echo "\u6211"
可以直接渲染出该码点对应的字符 “我”,这个码点和具体的字形是存在映射的。 - unicode 有一个 ucd(unicode character database) 的概念,并且我们可以下载这个 ucd 的最新版本。
- 我们升级操作系统就可以显示出一些之前不支持的新版本 emoji 字符
所以如果我的设想成立的话,那么:
- 这个 unicode 字符数据库存在于磁盘中的哪里?
- 我们如何升级 unicode 字符数据库让我们的操作系统无需升级就能渲染出新版本 emoji 字符?
- 把码点映射成字形是一个怎样的过程?(有了解过 case mapping 和 case folding ,但是没有真的搞懂)
- 字体与我所说的这些内容中有什么样的关联?
我有在网上找过这个 ucd 的存储位置,但是花了一些功夫,无果。
系统是不知道某个码点是某个字符的,更不可能知道这个字符长啥样。
系统只是把这个字符告诉终端,终端去字体中找到这个字符对应的图像,再把这个图像显示出来。如果字体中没有,那就会显示方框等所谓的乱码。
emoji的支持也是一样的,所以实际上是字体的功劳。可能系统在emoji的渲染上支持一些额外的特性(比如颜色,或者干脆用图片来代表emoji字符)。
现代操作系统内部都是用Unicode来处理字符的。设定字符集实际上是告诉系统如何处理外码和内码的对应,比如同一个字符,在UTF-8和UTF-16中的编码可能是不同的,字节数量也可能是不同的,但是对应的unicode其实同一个。比如系统处理一个字符,根据设定的字符集找到对应的UTF-8编码输出给终端,但是终端却是用UTF-16的规则来理解这些编码,那自然就会出错了。
这些不同字符集确实需要码表来对应,这些你可以在
/use/share/i18n/charmaps
下找到。