У меня возникли проблемы с функцией getch()
библиотеки curses
. Предположим, у нас есть следующая программа:
import curses
def main(stdscr):
while 1:
c = stdscr.getch()
stdscr.addstr(chr(c) + ": " + str(c) + "\n")
curses.wrapper(main)
Давайте запустим это и введем следующие символы: a
, <backspace>
, œ
Тогда вывод:
a: 97
ć: 263
Å: 197
Как видите, символ a
взят правильно. Однако другие нет. Я просто хочу получить backspace '\b'
и символ юникода œ
, но мы получаем кое-что еще.
Почему getch()
ведет себя таким образом и как добиться желаемого поведения?
ИЗМЕНИТЬ:
Позвольте мне подчеркнуть, что проблема не в печати символов, а в чтении символов. А именно, запуск stdscr.addstr('œ')
действительно печатает œ
.
locale.getpreferredencoding()
дает'UTF-8'
. - person Chiel ten Brinke   schedule 04.03.2014locale.setlocale(locale.LC_ALL, '')
в начале не меняет вывод. - person Chiel ten Brinke   schedule 04.03.2014