在基于 Debian 的系统上,如何找到字体具有字形的 Unicode 代码点?

Posted

技术标签:

【中文标题】在基于 Debian 的系统上,如何找到字体具有字形的 Unicode 代码点?【英文标题】:How can one find the Unicode codepoints that a font has glyphs for, on a Debian-based system? 【发布时间】:2013-03-31 13:28:42 【问题描述】:

从基于 Debian 的系统上的脚本语言(例如 Python 或 Ruby),我想找到以下任一种:

    特定字体具有字形的所有 Unicode 代码点 具有特定 Unicode 代码点字形的所有字体

(显然 1 或 2 可以从另一个派生,所以任何更容易的都会很棒。)我过去通过运行来做到这一点:

fc-list : file charset

... 并根据this code from fontconfig 解析每行末尾的输出 但在我看来,应该有更简单的方法来做到这一点。

(我不完全确定这是解决此问题的正确 StackExchange 站点,但我正在寻找可以以编程方式使用的答案。)

【问题讨论】:

“应该有更简单的方法”?你知道有多少种字体格式吗?并且您希望能够处理所有个?! @Kerrek SB:我知道(当然!)有许多不同的字体格式,但我们有处理这个问题的库 - 例如,我在问题中给出的 fontconfig 命令确实给了你我所追求的几种不同格式字体的信息。 相关:***.com/questions/4458696/… 这个 python 脚本效果很好:unix.stackexchange.com/a/268286/26952 【参考方案1】:

我会尝试任何FreeType 2 language bindings。这是使用Font::FreeType 列出字体的Unicode 代码点的Perl 解决方案:

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

【讨论】:

+1 谢谢,这很有帮助 - 如果有其他答案,我会在勾选“接受”之前稍等片刻。 知道为什么这似乎没有注意到分配给私人使用区域的字形,比如备用花体字? 不,但这肯定不是 Perl 绑定的问题。快速浏览一下 freetype2 源代码,可能find_unicode_charmap 选择了错误的charmap?【参考方案2】:

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

ttx -t cmap foo.ttf

将为各种环境和编码生成一个 XML 文件 foo.ttx,该文件描述该映射。参见例如this reference 用于描述平台和编码标识符的实际含义。我假设该包可以用作库和命令行工具,但我没有这方面的经验。

【讨论】:

以上是关于在基于 Debian 的系统上,如何找到字体具有字形的 Unicode 代码点?的主要内容,如果未能解决你的问题,请参考以下文章

如何在基于 Debian 的系统中构建 RPM 包?

ubuntu 9.10如何安装中文字体??

Debian 10 | Debian 9系统安装PostgreSQL 13详细过程

Kibana:使用 Debian 安装包来安装 Kibana 8.x

在Debian Mate上,Visual Studio Code严重渲染字体

怎样缩小字间距