ncurses getch & unicode (was: decoding keyboard input when using curses)

Thomas Dickey dickey at his.com
Fri Aug 21 04:47:42 EDT 2009


On Aug 20, 6:12 pm, Iñigo Serna <inigose... at gmail.com> wrote:
> Hi again,
>
> 2009/8/20 Iñigo Serna <inigose... at gmail.com>
> > I have the same problem mentioned inhttp://groups.google.com/group/comp.lang.python/browse_thread/thread/...some months ago.
>
> > Python 2.6 program which usesncursesmodule in a terminal configured to use UTF-8 encoding.
>
> > When trying to get input from keyboard, a non-ascii character (like ç) is returned as 2 integers < 255, needing 2 calls to getch method to get both.
> > These two integers \xc3 \xa7 forms the utf-8 encoded representation of ç character.
>
> >ncursesget_wch documentation states the function should return an unique integer > 255 with the ordinal representation of that unicode char encoded in UTF-8, \xc3a7.
>
> Answering myself, I've copied at the bottom of this email a working
> solution, but the question still remains: why win.getch() doesn't
> return the correct value?

The code looks consistent with the curses functions...

> Kind regards,
> Iñigo Serna
>
> ######################################################################
> # test.py
> import curses
>
> import locale
> locale.setlocale(locale.LC_ALL, '')
> print locale.getpreferredencoding()
>
> def get_char(win):
>     def get_check_next_byte():
>         c = win.getch()

You're using "getch", not "get_wch" (Python's ncurses binding may/may
not have the latter).
curses getch returns 8-bit values, get_wch would return wider values.



More information about the Python-list mailing list