█
python3 curses 프로그램에서 사용할 수 없습니다 . 이것은 내 코드의 일부입니다.
import curses
import locale
locale.setlocale(locale.LC_ALL)
locale.getpreferredencoding()
stdscr = curses.initscr()
caracter = str('█')
stdscr.border(
caracter, caracter, caracter, caracter,
caracter, caracter, caracter, caracter)
이 오류가 발생합니다.
OverflowError : 바이트가 chtype에 맞지 않습니다.
그러나 addstr
다음과 같은 utf-8 코드를 작성 하기 위해 함수를 사용할 수 있습니다.
stdscr.addstr(0, 0, "█")
당신의 도움을 주셔서 감사합니다.
문제는 Python curses
패키지가 ncurses C 라이브러리의 래퍼 일 뿐이라는 것입니다. 그리고 ncurses ( https://linux.die.net/man/3/ncurses )에서 문자는 chtype (문자 및 속성 데이터)으로 표시됩니다. 여기서 문자는 char
일반적인 시스템에서 한 바이트 인 C 유형입니다. .
기본 border
함수는 테두리의 각 문자가 단일 바이트 일 것으로 예상하는 반면, 사용하려는 'FULL BLOCK'은 유니 코드 문자 U + 2588 또는 UTF-8 바이트 문자열 b'\xe2\x96\x88'
입니다. 이것이 오류 메시지의 이유입니다. 3 바이트 시퀀스를 단일 바이트 변수에 저장하려고합니다.
이 addstr
함수는 문자열을 예상하고 3 바이트 시퀀스를 받아들이 기 때문에 잘 작동합니다 . 그러나 addch
하나의 문자열을 기대하는 것은 깨질 것 입니다.
달리 말하면 curses 모듈은 문자열이 필요한 경우를 제외하고는 멀티 바이트 UTF-8 시퀀스를 허용하지 않습니다.
가능한 해결 방법 :
curses
Python 모듈 을 사용하는 데 권장되는 방법 은 요구 사항과 일치하는 단일 바이트 인코딩을 찾는 것입니다. Latin1 (ISO-8859-1)은 ncurses의 기본값이기도하지만 다른 인코딩이 사용자의 요구를 더 잘 충족 할 수 있습니다.0x2588
문자 값으로 기꺼이 받아 들일 것입니다 . 또는 더 일반적으로 유니 코드의 기본 다국어 평면 인 16 비트 전용 코드 포인트를 가진 모든 문자를 받아들입니다. 불행히도 나는 아무것도 모른다.이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다