[英]Use utf-8 character for curses border
我不能使用█
字符作為詛咒邊界。
代碼示例:
import curses
stdscr = curses.initscr()
c = '█'
stdscr.border(c, c, c, c, c, c, c, c)
stdscr.getch()
我得到這個錯誤:
溢出錯誤:字節不適合 chtype
但是,我可以使用addstr
編寫一些 utf-8 字符,如下所示:
stdscr.addstr(0, 0, "█")
謝謝你的幫助。
問題在於 Python curses
包只是 ncurses C 庫的包裝器。 在 ncurses ( https://linux.die.net/man/3/ncurses ) 中,字符表示為chtype,(字符和屬性數據) ,其中字符是 C char
類型,它只是普通的一個字節系統。
底層border
函數期望border
每個字符為單個字節,而您嘗試使用的“FULL BLOCK”是 unicode 字符 U+2588 或 UTF-8 字節字符串b'\\xe2\\x96\\x88'
。 這就是錯誤消息的原因:您嘗試將 3 字節序列存儲到單字節變量中。
它對addstr
工作正常,因為該函數需要一個字符串並接受 3 個字節的序列。 但是它會被addch
打破,它期望一個字符串。
換句話說,除了需要字符串的地方,curses 模塊不會接受多字節 UTF-8 序列。
可能的解決方法:
curses
Python 模塊的推薦方法是找到符合您要求的單字節編碼。 Latin1 (ISO-8859-1) 甚至是 ncurses 的默認值,但其他編碼可以更好地滿足您的需求。0x2588
作為字符值,或者更一般地說,任何只有 16 位代碼點的字符,這只是 Unicode 的基本多語言平面。 不幸的是,我不知道。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.