我们如何从python中的字形id获取unicode?

时间:2015-03-19 07:10:02

标签: python python-2.7 unicode glyph

如果我有像下面这样的字形ID,我怎样才能从中获取unicode,语言是我正在研究的python?另外我理解的第二个值是字形id,但我们称之为第一个值和第三个值?

 (582, 'uni0246', 'LATIN CAPITAL LETTER E WITH STROKE'), (583, 'uni0247', 'LATIN SMALL LETTER E WITH STROKE'), (584, 'uni0248', 'LATIN CAPITAL LETTER J WITHSTROKE'), (585, 'uni0249', 'LATIN SMALL LETTER J WITH STROKE')

请回复。

实际上我试图从python中的给定ttf文件中获取unicode。这是代码:

 from fontTools.ttLib import TTFont
 from fontTools.unicode import Unicode
 from ttfquery import ttfgroups
 from fontTools.ttLib.tables import _c_m_a_p
 from itertools import chain

 ttfgroups.buildTable() 
 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))`

这段代码我只是从stackoverflow得到的,但这给出了上面的输出,而不是我需要的。那么有人可以告诉我如何从ttf文件中获取unicodes,或者将glyphid转换为unicode是否合适,是否会产生实际的unicode?

2 个答案:

答案 0 :(得分:2)

您可以使用第一个字段:unichr(x [0]),或等效第二个字段。然后你删除“uni”部分([3:])并将它转换为十六进制值'',然后转换为字符。当然,第一种方法更快更简单。

unichr(int(x [1] [3:],16))#对于你展示的第一个项目,返回'Ɇ',第二个'ɇ'

如果使用python3,则使用chr而不是unichr。

答案 1 :(得分:0)

这是在ttf文件中查找所有unicode字符的简单方法。

chars = []
with TTFont('/path/to/ttf', 0, ignoreDecompileErrors=True) as ttf:
    for x in ttf["cmap"].tables:
        for (code, _) in x.cmap.items():
            chars.append(chr(code))
# now chars is a list of \uxxxx characters
print(chars)