Hi again, 2009/8/20 Iñigo Serna <inigose...@gmail.com> > > I have the same problem mentioned in > http://groups.google.com/group/comp.lang.python/browse_thread/thread/c70c80cd9bc7bac6?pli=1 > some months ago. > > Python 2.6 program which uses ncurses module 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. > > ncurses get_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? 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() if 128 <= c <= 191: return c else: raise UnicodeError bytes = [] c = win.getch() if c <= 127: # 1 bytes bytes.append(c) elif 194 <= c <= 223: # 2 bytes bytes.append(c) bytes.append(get_check_next_byte()) elif 224 <= c <= 239: # 3 bytes bytes.append(c) bytes.append(get_check_next_byte()) bytes.append(get_check_next_byte()) elif 240 <= c <= 244: # 4 bytes bytes.append(c) bytes.append(get_check_next_byte()) bytes.append(get_check_next_byte()) bytes.append(get_check_next_byte()) buf = ''.join([chr(b) for b in bytes]) buf = buf.decode('utf-8') return buf def getcodes(win): codes = [] while True: try: ch = get_char(win) except KeyboardInterrupt: return codes codes.append(ch) lst = curses.wrapper(getcodes) print lst for c in lst: print c.encode('utf-8'), print ###################################################################### -- http://mail.python.org/mailman/listinfo/python-list