查找字体支持哪些字符

问题描述:

如何在Linux上从TrueType或嵌入OpenType字体中提取受支持的Unicode字符的列表?查找字体支持哪些字符

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

下面是使用FontTools模块(你可以像安装方法pip install fonttools):

#!/usr/bin/env python 
from itertools import chain 
import sys 

from fontTools.ttLib import TTFont 
from fontTools.unicode import Unicode 

ttf = TTFont(sys.argv[1], 0, verbose=0, allowVID=0, 
       ignoreDecompileErrors=True, 
       fontNumber=-1) 

chars = chain.from_iterable([y + (Unicode[y[0]],) for y in x.cmap.items()] for x in ttf["cmap"].tables) 
print(list(chars)) 

# Use this for just checking if the font contains the codepoint given as 
# second argument: 
#char = int(sys.argv[2], 0) 
#print(Unicode[char]) 
#print(char in (x[0] for x in chars)) 

ttf.close() 

脚本把参数作为字体路径:

python checkfont.py /path/to/font.ttf 
+0

'int(sys.argv [2],0)'在大多数情况下可能会失败并显示“无效文字”,因为可能需要查找特殊字符。改用'ord(sys.argv [2] .decode('string_escape')。decode('utf-8'))'。 – 2017-02-07 12:44:12

+1

无论如何,这个基于'python-fontconfig'的脚本似乎要快得多:http://unix.stackexchange.com/a/268286/26952 – 2017-02-07 12:44:51

+0

@SkippyleGrandGourou那句话看起来不错吧?它将'sys.argv [1]'传递给'TTFont()'? – Carpetsmoker 2017-02-07 15:28:31

你可以在Perl中使用Font::TTF模块在Linux上执行此操作。

ttf/otf字体的字符代码点存储在CMAP表中。

您可以使用TTX生成CMAP表的XML表示。看到http://www.letterror.com/code/ttx/index.html

一旦你运行TTX,你可以运行命令“ttx.exe -tcmap MyFont.ttf”,它应该输出一个文件“MyFont.ttx”。在文本编辑器中打开它,它会显示它在字体中找到的所有字符代码。

+0

谢谢,这很有帮助。 – 2011-07-13 04:08:14

我刚刚遇到了同样的问题,并且制作了一个HOWTO,它进一步烘烤了所有受支持的Unicode代码点的正则表达式。

如果你只是想码点的数组,你也可以在Chrome devtools您ttx XML偷看时,运行ttx -t cmap myfont.ttf后,很可能利用这一点,重命名myfont.ttxmyfont.xml调用浏览器的XML模式:

function codepoint(node) { return Number(node.nodeValue); } 
$x('//cmap/*[@platformID="0"]/*/@code').map(codepoint); 

(也依赖于fonttools从gilamesh的建议; sudo apt-get install fonttools如果你是一个Ubuntu系统上。)

fc-query my-font.ttf会给你地图支持的字形,所有的语言环境的字体是根据到的Fontconfig

合适

由于几乎所有的现代linux应用程序都是基于fontconfig的,这比原始的unicode列表更有用

实际的输出格式在这里讨论 http://lists.freedesktop.org/archives/fontconfig/2013-September/004915.html

Linux程序xfd可以做到这一点。它在我的发行版中被提供为'xorg-xfd'。要查看字体的所有字符,可以在终端中运行此操作:

xfd -fa "DejaVu Sans Mono" 
+0

xfd也给出十六进制值,因为你需要输入它们为unicode ala ctrl + shift + u – euxneks 2015-05-12 23:25:04

+12

打开一个GUI字符映射与列出支持的字符完全不一样。 – rspeer 2015-08-04 03:15:31