Hi again,
2009/8/20 Iñigo Serna <[email protected]>
>
> 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