Как мы можем получить Unicode из идентификатора глифа в Python?

Если у меня есть идентификаторы глифов, как показано ниже, как я могу получить от них юникод, язык Python, над которым я работаю? Также я понимаю, что второе значение - это идентификатор глифа, но как мы называем первое значение и третье значение?

 (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')

Пожалуйста, ответьте.

На самом деле я пытаюсь получить Unicode из данного файла TTF в Python. Вот код:

 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))`

Этот код я получил только из stackru, но он дает приведенный выше вывод, а не то, что мне требуется. Так может кто-нибудь, пожалуйста, скажите мне, как получить юникоды из файла ttf, или это нормально для преобразования глифа в Unicode, он уступит фактическому Unicode?

1 ответ

Вы можете использовать первое поле: unichr(x[0]) или, что то же самое, второе поле. Затем вы удаляете часть "uni" ([3:]) и конвертируете ее в шестнадцатеричное значение, а затем в символ. Конечно, первый способ быстрее и проще.

unichr (int (x [1] [3:], 16)) # для первого показанного элемента возвращает "Ɇ", для второго "ɇ"

Если вы используете python3, используйте chr вместо unichr.

Вот простой способ найти все символы Юникода в файле ttf.

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)
Другие вопросы по тегам