getch() 返回错误字符
我在使用 curses
库里的 getch()
函数时遇到了一些问题。假设我们有以下这个程序:
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 个回答
4
在Python 3.3版本中,新增了一个叫做 window.get_wch
的功能。这个功能可以正确处理各种字符。
如果你查看 window.getch
的说明,你会发现它并没有说支持非ASCII的可打印字符。它只是说明可以处理一些特殊的按键,比如功能键或者数字键盘的按键。
补充说明:
使用 window.get_wch
时,输入的字符(比如 'a'
、'ă'
、'好'
、'\n'
或 '\t'
)会以字符串的形式返回。而功能键则会以整数的形式返回(例如 265
或 274
)。这里有一个新的示例可以运行。你可以尝试按不同的键,看看它们的返回值是什么。打印出来的数据格式是: [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)'