如何在基于Debian的系统上查找字体包含的Unicode编码点与字形?

11

在一个基于Debian的系统上,从一种脚本语言(如Python或Ruby)中,我希望找到以下其中一种:

  1. 某个字体具有字形的所有Unicode代码点
  2. 具有特定Unicode代码点字形的所有字体

(显然,1或2可以由另一个推导出来,因此任何一种更容易的方法都可以。)我过去曾通过运行以下命令来实现此目的:

fc-list : file charset

...并解析每行末尾的输出,基于这个来自fontconfig的代码,但我认为应该有一种更简单的方法来完成这个任务。

(我不完全确定这是否是正确的StackExchange网站来提问,但我正在寻找可以在程序中使用的答案。)


“应该有更简单的方法吧?”你知道有多少字体格式吗?而且你想要能够处理所有这些格式?! - Kerrek SB
@Kerrek SB:我当然知道有许多不同的字体格式,但我们有处理它们的库——例如,我在问题中提供的fontconfig命令可以为多种不同格式的字体提供所需的信息。 - Mark Longair
2
相关:https://dev59.com/i2855IYBdhLWcg3wPBtx - leonbloy
1
这个Python脚本非常好用:http://unix.stackexchange.com/a/268286/26952 - Skippy le Grand Gourou
2个回答

7

我会尝试使用任意一个FreeType 2语言绑定。下面是一个使用Font::FreeType在Perl中列出字体Unicode编码点的方案:

use Font::FreeType;
Font::FreeType->new->face('DejaVuSans.ttf')->foreach_char(sub {
    printf("%04X\n", $_->char_code);
});

+1 谢谢,非常有帮助 - 我会等一会儿再打勾“接受答案”,以防还有其他答案。 - Mark Longair
1
为什么它似乎没有注意到分配给私有使用区域的字形,比如替代花纹? - tchrist
不是,但这绝对不是Perl绑定根源的问题。从快速查看freetype2源代码来看,也许find_unicode_charmap选择了错误的字符映射表? - nwellnhof
在Debian/Ubuntu系统上安装模块:sudo apt install libfont-freetype-perl - mivk

4

我最近使用TTX/FontTools列出了TTF中Unicode码点到字形的映射。该工具是用Python编写的,因此它与您帖子中的Python标签相匹配。命令如下:

ttx -t cmap foo.ttf

将生成一个XML文件foo.ttx,描述了各种环境和编码的映射关系。例如,请参阅此参考文献以了解平台和编码标识符实际上是什么意思。 我假设该软件包既可以用作库,也可以用作命令行工具,但我在那方面没有经验。


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