磁盘上的unicode字符在哪里,映射过程是什么?
Where are the unicode characters on the disk and what's the mapping process?
有几个unicode相关的问题困扰了我一段时间。
出于以下这些原因,我认为磁盘上存在 unicode 字符。
- 在终端中执行
echo "\u6211"
,它会打印对应unicode代码点U+6211的字形。
- 有一个UCD(unicode字符数据库)的概念,我们可以下载它的最新版本。 UCD latest
- 在我升级 macOS 版本之前,某些新版本的 unicode 字符(如最新的表情符号)无法在我的 mac 上显示。
所以如果磁盘上确实存在unicode字符,那么:
- 它在哪里?
- 如何升级它?
- 将 unicode 代码点映射到字形的过程是什么?
- 如果我使用特定字体,那么将 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。
有几个unicode相关的问题困扰了我一段时间。
出于以下这些原因,我认为磁盘上存在 unicode 字符。
- 在终端中执行
echo "\u6211"
,它会打印对应unicode代码点U+6211的字形。 - 有一个UCD(unicode字符数据库)的概念,我们可以下载它的最新版本。 UCD latest
- 在我升级 macOS 版本之前,某些新版本的 unicode 字符(如最新的表情符号)无法在我的 mac 上显示。
所以如果磁盘上确实存在unicode字符,那么:
- 它在哪里?
- 如何升级它?
- 将 unicode 代码点映射到字形的过程是什么?
- 如果我使用特定字体,那么将 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。