gpt4 book ai didi

python - 字体工具 : extracting useful UTF information provided by it

转载 作者:太空宇宙 更新时间:2023-11-04 10:25:38 27 4
gpt4 key购买 nike

FontTools正在生成一些包含此结构中各种细节的 XML

  <cmap>
<tableVersion version="0"/>
<cmap_format_4 platformID="0" platEncID="3" language="0">
<map code="0x20" name="space"/><!-- SPACE -->
<!--many, many more characters-->
</cmap_format_4>
<cmap_format_0 platformID="1" platEncID="0" language="0">
<map code="0x0" name=".notdef"/>
<!--many, many more characters again-->
</cmap_format_0>
<cmap_format_4 platformID="0" platEncID="3" language="0"> <!--"cmap_format_4" again-->
<map code="0x20" name="space"/><!-- SPACE -->
<!--more "map" nodes-->
</cmap_format_4>
</cmap>

我试图找出该字体支持的每个字符,所以这些 code 属性是我感兴趣的。我相信我认为 all code 属性是 UTF-8 值:这是正确的吗?我很好奇为什么有两个节点cmap_format_4(它们看起来是相同的,但我还没有用这些字体进行大量测试,所以如果熟悉这个模块的人肯定知道,那是我的第一个问题)。

为了确保我看到字体中包含的所有字符,我是否需要组合所有 code 属性值,还是只需要一个或两个。 FontTools 会始终生成这三个 XML 节点,还是数量可变?知道为什么吗? The documentation有点模糊。

最佳答案

  • cmap_format_N 节点(“cmap 子表”)的数量是可变的,“N”(格式)也是如此。有几种格式;最常见的是 4,但也有格式 12、格式 0、格式 6 等。

  • 字体可以有多个 cmap 子表,但不是必须的。之所以会这样,是因为TrueType(已经演变成OpenType)的发展史。该格式是在 Unicode 之前发明的,当时每个平台都有自己的字符映射方式。不同的格式和具有多个映射的能力在当时是必要的,以便拥有一个可以映射所有内容而无需多个文件、重复等的单个字体文件。现在生产的大多数字体将只有一个 Unicode 子表,但是有许多有多个子表。

  • map 节点中的code 值是以十六进制表示的代码点值。它们可能是 Unicode 值,但不一定(请参阅下一点)。

  • 我认为您的字体可能已损坏(或者可能存在复制/粘贴混淆)。 cmap 中可以有多个 cmap_format_N 条目,但 platformID/platformEncID/language 的每个组合都应该是唯一的。此外,重要的是要注意并非所有 cmap 子表都映射 Unicode;有些表达较旧的、前 Unicode 编码。您应该首先查看 platformID="3"的表,然后是 platformID="0",最后是 platformID="2"作为最后的手段。其他 platformID 不一定映射 Unicode 值。

至于发现“映射到一种字体中的所有 Unicode”:当有多个 Unicode 子表时,这可能有点棘手,尤其是当它们的内容不同时。您可以通过合并所有已知为 Unicode 映射的子表中的所有 code 值来接近,但重要的是要了解大多数平台只会使用其中一个映射时间。通常有一个类似于我上面所说的首选拣选顺序;当找到一个时,那就是使用的那个。没有适用于所有平台的标准化偏好顺序(据我所知),但大多数流行的偏好顺序与我列出的顺序非常接近。

最后,关于 Unicode 与 UTF-8:code 值是 Unicode 代码点不是 UTF-8 字节序列。如果您不确定两者之间的区别,请花一些时间阅读有关 character encodings and byte serialization at Unicode.org 的内容.

关于python - 字体工具 : extracting useful UTF information provided by it,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29422062/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com