如何找出在TTF文件中定义了哪些Unicode代码点?


11

我需要自动执行一个过程,以验证哪些Unicode字符在True Type字体文件中为它们定义了实际的字形。我该怎么做?在文本编辑器中打开.ttf文件时,我似乎找不到有关如何理解数字的信息。

Answers:


7

我发现了一个python库,fonttoolspypi),可以使用一些python脚本来完成此工作。

这是一个简单的脚本,列出了所有已指定字形的字体:

#!/usr/bin/env python3

from fontTools.ttLib import TTFont
import sys

char = int(sys.argv[1], base=0)

print("Looking for U+%X (%c)" % (char, chr(char)))

for arg in sys.argv[2:]:
    try:
        font = TTFont(arg)

        for cmap in font['cmap'].tables:
            if cmap.isUnicode():
                if char in cmap.cmap:
                    print("Found in", arg)
                    break
    except Exception as e:
        print("Failed to read", arg)
        print(e)

第一个参数是代码点(十进制或带有0x的六进制),其余为要查找的字体文件。

我没有试图使它适用于.ttc文件的麻烦(它在某处需要一些额外的参数)。

注意:我首先尝试使用otfinfo工具,但仅获得基本的多语言平面字符(<= U + FFFF)。python脚本可以找到扩展平面字符。


6

otfinfo看起来很有希望:

-u, --unicode
  Print each Unicode code point supported by the font, followed by
  the glyph number representing that code point (and, if present,
  the name of the corresponding glyph).

例如,DejaVuSans-Bold知道fl连字(fl):

$ otfinfo -u /usr/share/fonts/TTF/DejaVuSans-Bold.ttf |grep ^uniFB02
uniFB02 4899 fl

该工具正是我所需要的,但它似乎不适用于TrueType字体,仅适用于OpenType字体。
Sanuuu 2015年

它也可以与ttf一起使用。参见上面的示例。(根据Wikipedia ttf是OpenType字体的一种特殊类型。)
michas 2015年

嗯...我的otfinfo(2.92)版本似乎根本没有-u选项。您正在使用哪个版本?
Sanuuu 2015年

我从texlive软件包中使用了“ otfinfo(LCDF typetools)2.104” 。
michas 2015年

@Sanuuu,该-u选项未出现在中--help,但似乎仍然存在。但是(至少在Debian 2.105构建中)它似乎仅列出基本平面(最多U + FFFF)。该-g选项知道扩展平面,但不适用于所有字体。
Jan Hudec
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.