在基于 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 10 | Debian 9系统安装PostgreSQL 13详细过程
Kibana:使用 Debian 安装包来安装 Kibana 8.x