getch()返回错误的字符

时间:2014-03-03 21:06:14

标签: python unicode ascii curses getch

我遇到getch()库的curses功能问题。 假设我们有以下程序:

import curses

def main(stdscr):
    while 1:
        c = stdscr.getch()
        stdscr.addstr(chr(c) + ": " + str(c) + "\n")
curses.wrapper(main)

让我们运行它,并输入以下字符:a<backspace>œ

然后输出是:

a: 97
ć: 263
Å: 197

如您所见,a字符已正确使用。 但是,其他人则没有。我只想获得退格'\b'和unicode字符œ,但我们还得到其他内容。

为什么getch()会以这种方式表现,我怎样才能获得所需的行为?

修改

让我强调一下,打印角色不是问题,而是阅读角色。即,正在运行stdscr.addstr('œ')确实会打印œ

1 个答案:

答案 0 :(得分:4)

在Python 3.3中添加了window.get_wch功能。它正确处理所有这些字符。

如果您阅读window.getch的文档,则会注意到它并不声称支持非ASCII可打印字符。它只是记录它可以处理非ASCII键按下,如功能键或键盘键。

修改

使用window.get_wch时,字符(例如'a''ă''好''\n''\t')将作为字符串返回。功能键以整数形式返回(例如265274)。这是一个运行的新示例。尝试使用您要识别的不同键进行播放,以查看其值的返回方式。打印数据的格式为:[repr]: [type]

def main(stdscr):
    while 1:
        c = stdscr.get_wch()
        stdscr.addstr("%s: %s\n" % (repr(c), type(c)))

以下是我输入aœ<enter><backspace><F1>时的内容:

'a': <class 'str'>
'œ': <class 'str'>
'\n': <class 'str'>
'\x7f': <class 'str'>
265: <class 'int'>

如果返回一个整数,您可以找到通过curses.keyname按下的键的名称:

>>> curses.keyname(265)
b'KEY_F(1)'