gpt4 book ai didi

Python curses - textpad.Textbox() 键盘输入不适用于德语变音符号

转载 作者:行者123 更新时间:2023-11-28 17:18:52 25 4
gpt4 key购买 nike

我正在尝试使用 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()

最佳答案

就像在 C 中一样,您应该初始化语言环境。 Python documentation 中均有说明:

Since version 5.4, the ncurses library decides how to interpret non-ASCII data using the nl_langinfo function. That means that you have to call locale.setlocale() in the application and encode Unicode strings using one of the system’s available encodings.

ncurses manual page :

   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 bindingwgetch 提供接口(interface),其中(使用 ncurses)给出了 UTF-8 的各个字节。 (X/Open Curses 指定了一个不同的函数 wget_wch ,Python 对此没有绑定(bind))。

可以修改

textpad.py 以通过将字节组装成 Unicode 值来绕过 curses 绑定(bind),但第一步需要 setlocale

关于Python curses - textpad.Textbox() 键盘输入不适用于德语变音符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42510606/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com