查找字体支持哪些字符
如何在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
ttf/otf字体的字符代码点存储在CMAP表中。
您可以使用TTX生成CMAP表的XML表示。看到http://www.letterror.com/code/ttx/index.html
一旦你运行TTX,你可以运行命令“ttx.exe -tcmap MyFont.ttf”,它应该输出一个文件“MyFont.ttx”。在文本编辑器中打开它,它会显示它在字体中找到的所有字符代码。
谢谢,这很有帮助。 – 2011-07-13 04:08:14
我刚刚遇到了同样的问题,并且制作了一个HOWTO,它进一步烘烤了所有受支持的Unicode代码点的正则表达式。
如果你只是想码点的数组,你也可以在Chrome devtools您ttx
XML偷看时,运行ttx -t cmap myfont.ttf
后,很可能利用这一点,重命名myfont.ttx
到myfont.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
'int(sys.argv [2],0)'在大多数情况下可能会失败并显示“无效文字”,因为可能需要查找特殊字符。改用'ord(sys.argv [2] .decode('string_escape')。decode('utf-8'))'。 – 2017-02-07 12:44:12
无论如何,这个基于'python-fontconfig'的脚本似乎要快得多:http://unix.stackexchange.com/a/268286/26952 – 2017-02-07 12:44:51
@SkippyleGrandGourou那句话看起来不错吧?它将'sys.argv [1]'传递给'TTFont()'? – Carpetsmoker 2017-02-07 15:28:31