TTF 파일에 정의 된 유니 코드 코드 포인트를 찾는 방법은 무엇입니까? 코드 문자를 확인하는 프로세스를 자동화해야합니다.

트루 타입 글꼴 파일에서 실제 문자 모양이 정의 된 유니 코드 문자를 확인하는 프로세스를 자동화해야합니다. 어떻게하면 되나요? 텍스트 편집기에서 .ttf 파일을 열 때 얻는 숫자를 이해하는 방법에 대한 정보를 찾을 수 없습니다.



답변

파이썬 라이브러리, fonttools ( pypi )를 발견하여 약간의 파이썬 스크립팅으로 사용할 수 있습니다.

다음은 글리프를 지정한 모든 글꼴을 나열하는 간단한 스크립트입니다.

#!/usr/bin/env python3

from fontTools.ttLib import TTFont
import sys

char = int(sys.argv[1], base=0)

print("Looking for U+%X (%c)" % (char, chr(char)))

for arg in sys.argv[2:]:
    try:
        font = TTFont(arg)

        for cmap in font['cmap'].tables:
            if cmap.isUnicode():
                if char in cmap.cmap:
                    print("Found in", arg)
                    break
    except Exception as e:
        print("Failed to read", arg)
        print(e)

첫 번째 인수는 코드 포인트 (십진수 또는 0x의 16 진수)이고 나머지는 찾아 볼 글꼴 파일입니다.

.ttc파일에서 작동하도록 신경 쓰지 않았습니다 (어딘가에 추가 매개 변수가 필요함).

참고 : 나는 먼저 otfinfo 도구를 시도했지만 기본 다국어 비행기 문자 (<= U + FFFF) 만 얻었습니다. 파이썬 스크립트는 확장 평면 문자를 확인합니다.


답변

otfinfo 는 유망한 것으로 보입니다.

-u, --unicode
  Print each Unicode code point supported by the font, followed by
  the glyph number representing that code point (and, if present,
  the name of the corresponding glyph).

예를 들어 DejaVuSans-Bold는 fl ligature (FL)에 대해 알고 있습니다.

$ otfinfo -u /usr/share/fonts/TTF/DejaVuSans-Bold.ttf |grep ^uniFB02
uniFB02 4899 fl