磁盘上的unicode字符在哪里,映射过程是什么?

Where are the unicode characters on the disk and what's the mapping process?

有几个unicode相关的问题困扰了我一段时间。

出于以下这些原因,我认为磁盘上存在 unicode 字符。

  1. 在终端中执行echo "\u6211",它会打印对应unicode代码点U+6211的字形。
  2. 有一个UCD(unicode字符数据库)的概念,我们可以下载它的最新版本。 UCD latest
  3. 在我升级​​ macOS 版本之前,某些新版本的 unicode 字符(如最新的表情符号)无法在我的 mac 上显示。

所以如果磁盘上确实存在unicode字符,那么:

  1. 它在哪里?
  2. 如何升级它?
  3. 将 unicode 代码点映射到字形的过程是什么?
  4. 如果我使用特定字体,那么将 unicode 代码点映射到字形的过程是什么?

如果不是,那么将 unicode 代码点映射到字形的过程是什么?

如果有人能阐明这些问题,我们将不胜感激。

一般来说,使用文本的操作系统组件使用 Unicode 字符集。特别是,字体文件使用 Unicode 字符集。但是,并非所有字体文件都支持所有 Unicode 代码点。

当一种字体不支持代码点时,系统可能会回退到另一种支持的代码点。 Web 浏览器尤其如此。但最终,如果代码点不受支持,则会呈现一个未填充的矩形。 (没有字符,因为它不是字符。事实上,如果您能够将其复制并粘贴为文本,它应该是无法呈现的原始字符。)

在 Web 开发中,网页 可以 提供或给出应该适用于其使用的代码点的字体位置。

其他程序通常使用操作系统的呈现工具,因此可以通过它使用字体。如何在操作系统中安装字体不是编程问题(除非您在程序的安装程序中包含字体)。有关这方面的更多信息,您可以查看问题是否适合 Ask Different (Apple) Stack Exchange 站点。

Execute echo "\u6211" in terminal, it will print the glyph corresponding to the unicode code point U+6211.

那是 bash 中的 echo -e

› echo "\u6211"
\u6211
› echo -e "\u6211"
我

Where is it ?

在字体文件中。

Some new version unicode characters like latest emojis can not display on my mac until I upgrade macOS version. How can I upgrade it ?

Installing/upgrading一个合适的字体加上表情符号就足够了。我没有 macOS,所以无法验证。

我用的是"Noto Color Emoji"版本2.011/20180424,没问题。

What's the process of mapping the unicode code point to a glyph ?

应用程序(例如文本编辑器)为字体渲染子系统(Quartz?在 macOS 上)提供 Unicode 文本和字体名称。字体渲染器分析文本的代码点并确定这是简单文本(例如拉丁文、中文、独立表情符号)还是复杂文本(例如带有许多标记的拉丁文、泰文、阿拉伯文、具有零宽度连接符的表情符号)。渲染器找到对应的 outlines in the font file. If the file does not have the required glyph, the renderer may use a similar font, or use a configured fallback font for a poor substitute (white box, black question mark etc.). Then the outlines undergo shaping 组成一个复杂的字形和换行。最后,字体渲染器将结果交给显示系统。

除了整形之外,这几乎与 Unicode 或编码无关。在 Unicode 出现之前,字体渲染已经习惯于以这种方式工作,当然,字体文件和渲染在 30 年前要简单得多。只有当有人想要从应用程序加载或保存文本时,编码才重要。

总结:调查

  • Truetype/Opentype 字体编辑软件,因此您可以查看文件中包含的内容
  • 字体渲染器,Linux 查看库 pango 和 freetype。