我正在尝试使用curses textpad.Textbox()
函数进行文本输入。到目前为止,一切工作正常,但有些按键无法识别,包括部分标志(§)和所有德国变形金刚(ä/ö/ü)。我想它与文本编码有某种关系,但我不知道如何解决这个问题。我的德语键盘布局与input()
完美配合。
以下是一些最小的例子:
import curses
import curses.textpad as textpad
try:
stdtscr = curses.initscr()
curses.cbreak()
stdtscr.keypad(1)
curses.noecho()
textpad.Textbox(stdtscr).edit()
finally:
curses.nocbreak()
stdtscr.keypad(0)
curses.echo()
curses.endwin()
答案 0 :(得分:2)
就像在C中一样,您应该初始化语言环境。它在Python documentation:
中都有详细说明从version 5.4开始,ncurses库决定如何使用nl_langinfo函数解释非ASCII数据。这意味着您必须在应用程序中调用locale.setlocale()并使用系统的可用编码之一编码Unicode字符串。
The library uses the locale which the calling program has
initialized. That is normally done with setlocale:
setlocale(LC_ALL, "");
If the locale is not initialized, the library assumes that
characters are printable as in ISO-8859-1, to work with cer-
tain legacy programs. You should initialize the locale and
not rely on specific details of the library when the locale
has not been setup.
解决后续评论,textpad.py在任何情况下都不希望输入UTF-8。基本上它“验证”它的输入,决定它不是ASCII而忽略它不是。
Python的curses binding提供了wgetch
的接口,其中(带有 ncurses )为UTF-8提供了单独的字节。 (X / Open Curses指定了一个不同的函数wget_wch
,Python没有绑定)。
textpad.py
以解决curses绑定问题,但是您需要setlocale
作为第一步。