找出字体支持的字符

如何在Linux上从TrueType或embedded的OpenType字体中提取受支持的Unicode字符的列表?

是否有一个工具或库可以用来处理.ttf或.eot文件,并build立由字体提供的代码点列表(如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() 

该脚本需要作为参数的字体path:

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

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

 xfd -fa "DejaVu Sans Mono" 

fc-query my-font.ttf根据fontconfig给你一个支持的字形和所有适合的字体的地图

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

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

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

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

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

我只是遇到同样的问题,并做了一个HOWTO更进一步,烘烤所有支持的Unicode代码点的正则expression式。

如果你只是想要一些代码点,你可以在浏览器中使用ttx xml,在运行ttx -t cmap myfont.ttf ,或者重命名myfont.ttxmyfont.xml来调用Chrome的xml模式时使用:

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

(也依赖于来自gilamesh的build议的fonttools;如果你使用的是Ubuntu系统, sudo apt-get install fonttools 。)

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