我编写了一个 Python3 appindicator,它调用fortune并捕获输出以在屏幕通知中显示。
当当前字体中不存在相应的字形时,某些命运包含带有十六进制数字的方块。每个方块是缺失字形的十六进制 Unicode 代码点的表示。
我想在向用户显示之前删除十六进制文本。我希望找到一些 Python API,它可以让我逐个字符地检查文本,以确定类似char.isValidCodePoint()或类似的内容,但我找不到这样的内容。
我找到了一个可能的解决方案,我想在这里调查,但fonttools通过终端安装后,我的 Python 程序无法导入fonttools/fontTools.
任何想法 - 使用 Python API 还是调用终端?
更新 #1:我已经意识到fonttools上面链接中的示例代码对我不起作用,因为它是 Python2。我想如果fonttools可以以某种方式使用,我可以从我的 Python3 脚本中调用一个 Python2 解释器。
更新 #2:经过大量阅读(请参阅下面的参考资料)后,我发现fc-match但它不能总是唯一地标识正在使用的字体。我在 Python 中获取当前字体:
from gi.repository import Gio
fontName = Gio.Settings( "org.gnome.desktop.interface" ).get_string( "font-name" )
Run Code Online (Sandbox Code Playgroud)
导致Ubuntu 11. 将此结果pango-view与十六进制字符一起传递给,我得到一个字体列表,包括Ubuntu. 在我看来,如果字形不是由字体呈现的,则字体不应出现在pango-view!
参考:
已经想出了一个解决方案......最初我认为财富文本文件不包含十六进制字符。事实证明这是不正确的。因此,当我意识到这一点后,我提出了以下解决方案:
import codecs
fortune = <call the fortune program>
output = ""
for c in fortune:
if codecs.encode( str.encode( c ), "hex" ) == b'07':
continue
output += c
print( output )
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1872 次 |
| 最近记录: |