2017-02-28 9 views
1

텍스트 입력에 curses textpad.Textbox() 함수를 사용하려고합니다. 지금까지는 모든 것이 잘 작동하지만 섹션 기호 (§)와 모든 독일어 움라우트 (ä/ö/ü)를 포함하여 일부 키는 인식되지 않습니다. 나는 그것이 어떻게 든 텍스트 인코딩과 관련이 있다고 생각하지만,이 문제를 해결하는 방법을 모른다. 내 독일어 키보드 레이아웃은 input()으로 완벽하게 작동합니다.Python curses - textpad.Textbox() 키보드 입력이 독일어 움라우트로 작동하지 않습니다.

그냥 C에서와 같이
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() 

답변

1

, 당신은 로케일을 초기화한다 : 여기

는 최소한의 예입니다. 그것은 모두 Python documentation에서 철자 :

version 5.4 이후의 ncurses 라이브러리는 nl_langinfo 기능을 사용하여 비 ASCII 데이터를 해석하는 방법을 결정합니다. 즉, 응용 프로그램에서 locale.setlocale()을 호출하고 시스템의 사용 가능한 인코딩 중 하나를 사용하여 유니 코드 문자열을 인코딩해야합니다.

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가 아닌 것으로 판단하고 그렇지 않으면 무시합니다.

파이썬의 curses binding는 ( ncurses를 사용) UTF-8에 대한 각각의 바이트를 제공 wgetch에 인터페이스를 제공한다. (X/Open Curses는 다른 함수 인 wget_wch을 지정합니다. 파이썬에는 바인딩이 없습니다).

textpad.py은 유니 코드 값으로 바이트를 조합하여 저주 바인딩을 해결할 수 있지만 첫 번째 단계는 setlocale이 필요합니다.

+0

나는 이미 그걸 시도했지만 아무 것도 바뀌지 않았다. 전술 한 열쇠는 여전히 작동하지 않는다. – lysigk