查找特定字体支持哪些字符

84

我如何从Linux上的TrueType或嵌入式OpenType字体中提取支持的Unicode字符列表?

是否有工具或库可用于处理.ttf或.eot文件并构建字体提供的代码点列表(例如U+0123,U+1234等)?


6
尝试使用fc-list :charset=1234命令,并仔细检查其输出结果...(对我来说有效,它显示Gentium的字符集为2082但不是2161)。 - mirabilos
1
@mirabilos 这不是问题所问的。它显示包含给定字符(即1234)的字体。 - Neil Mayhew
没错。但是这两个问题是交织在一起的(而且你会在“回答”部分找到许多对错误问题的答案)。 - mirabilos
@mirabilos 很好的观点。我稍微编辑了标题,以使问题的意图更加明显。 - Neil Mayhew
在UNIX.SE上有同样的问题:[fonts - 如何查找TTF文件中定义的Unicode代码点?-Unix&Linux Stack Exchange](https://unix.stackexchange.com/q/247108/296692)--使用`otfinfo`提供答案。 - user202729
14个回答

0
如果您只想“查看”字体,以下内容可能会有所帮助(如果您的终端支持相关字体):
#!/usr/bin/env python
import sys
from fontTools.ttLib import TTFont

with TTFont(sys.argv[1], 0, ignoreDecompileErrors=True) as ttf:
    for x in ttf["cmap"].tables:
        for (_, code) in x.cmap.items():
            point = code.replace('uni', '\\u').lower()
            print("echo -e '" + point + "'")

一种不安全但简单的查看方式:

python font.py my-font.ttf | sh

感谢Janus(https://dev59.com/i2855IYBdhLWcg3wPBtx#19438403)提供上面的答案。


0

FreeType项目提供演示应用程序,其中一个演示称为“ftdump”。然后,您可以执行:“ftdump -V path-to-the-font-file”,并获得您要查找的内容。要查看源代码,您可以在此处关闭源:https://www.freetype.org/developer.html

在Ubuntu上,可以使用“sudo apt install freetype2-demos”进行安装

注意:请尝试使用“-c”而不是“-V”。我看到参数在版本之间已更改。


0

0
如果您想获取字体支持的所有字符,可以使用以下代码(基于Janus的回答):
from fontTools.ttLib import TTFont

def get_font_characters(font_path):
    with TTFont(font_path) as font:
        characters = {chr(y[0]) for x in font["cmap"].tables for y in x.cmap.items()}
    return characters

您如何修改此脚本使其能够与otf字体一起使用? - Mayer Goldberg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接