Я написал приложение Python3, которое вызывает fortune
и записывает вывод для отображения в экранном уведомлении.
Некоторые состояния содержат квадраты с шестнадцатеричным числом, когда соответствующий глиф не существует в текущем шрифте. Каждый квадрат представляет собой шестнадцатеричный код Unicode для отсутствующего глифа.
Я хочу удалить шестнадцатеричный текст перед отображением для пользователя. Я надеялся найти какой-нибудь Python API, который позволил бы мне проверять текст, символ за символом, чтобы определить что-то похожее char.isValidCodePoint()
или похожее, но я не могу найти как таковой.
Я нашел возможное решение, которое я хотел бы найти здесь, но после установки fonttools
через терминал моя программа на Python не смогла импортировать fonttools/fontTools
.
Есть идеи - использовать Python API или вызвать терминал?
Обновление № 1: с тех пор я понял, что fonttools
пример кода по ссылке выше не будет работать для меня, так как это Python2. Я полагаю, что если fonttools
бы можно было как-то использовать, я мог бы вызвать интерпретатор Python2 из моего скрипта Python3.
Обновление № 2: После большого прочтения (см. Ссылки ниже) я с тех пор нашел, fc-match
но он не всегда может однозначно идентифицировать используемый шрифт. Я получаю текущий шрифт в Python:
from gi.repository import Gio
fontName = Gio.Settings( "org.gnome.desktop.interface" ).get_string( "font-name" )
в результате чего Ubuntu 11
. Передав этот результат pango-view
вместе с шестнадцатеричным символом, я получаю список шрифтов, включая Ubuntu
. На мой взгляд, если глиф НЕ отрисован шрифтом, шрифт не должен появляться в результате из pango-view
!
Ссылки:
Unicode Shaping Engine
Используйте механизм формирования Unicode, такой как Harfbuzz, чтобы обнаружить недостающий глиф. Вот рабочий пример:
Вывод
Вот вывод в IDLE3 при проверке:
Проверьте правильность пути к шрифту, я просто выбрал первый, который увидел в моей текущей машине.
Замечания:
источник