Python 诅咒,从屏幕上读取宽字符的属性

Python Curses, reading wide character's attribute from screen

我要解决的问题是得到一对 ch,att 代表当前显示在某个给定位置的角色和相关属性。

现在,当显示的字符不是宽字符(即 ASCII 字符)时,方法 .inch 会完成正确屏蔽结果的工作。当显示的字符很宽时会出现问题。更准确地说,我知道如何通过 .instr 获取给定的字符,但是此函数不会 return 有关该属性的任何信息。

据我所知,没有单独获取属性的特定函数,我的第一次尝试是使用 .inch,删除低 8 位并将结果解释为属性。这似乎在某种程度上起作用但仔细检查我意识到以这种方式阅读没有属性的希腊字母(例如u"ub1")returns att = 11.0000.0000而不是0。有没有更好的方法来解决这个问题?

编辑,Python3

的最小示例
import curses

def bin(x):
    out = ''
    while x > 0:
        out = str(x % 2) + out
        x = x // 2

    return out

def main(s):
    s.addstr(1, 1, u'\u03b1')
    s.refresh()

    chratt = s.inch(1, 1)

    att = chratt & 0xFF00

    s.addstr(2, 1, bin(att))
    s.refresh()

    while True:
        pass

curses.wrapper(main)

如您所料,在 curses 中,inch 和 instr 仅适用于 ascii 字符。 “复杂”或“宽”字符(如来自 utf-8 的字符)有另一个系统,正如一位 ncurses 创建者所解释的那样here on Whosebug

然而,坏消息来了。它们尚未在 python curses 中实现(尚未)。已提交拉取请求 here 并且非常接近合并 (90%),所以如果您真的需要它,那为什么不自己贡献一下呢?

如果这不是一个选项,那么您可以尝试将您对屏幕所做的每个更改存储在一个变量中,然后从那里提取宽字符。