簡體   English   中英

使用 utf-8 字符作為詛咒邊框

[英]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 序列。

可能的解決方法:

  • 使用底層 ncurses 庫和curses Python 模塊的推薦方法是找到符合您要求的單字節編碼。 Latin1 (ISO-8859-1) 甚至是 ncurses 的默認值,但其他編碼可以更好地滿足您的需求。
  • 找到(或編寫)一個圍繞 ncursesw 的 Python 包裝器。 這是使用寬(16 位)字符的 ncurses 的變體。 它很樂意接受0x2588作為字符值,或者更一般地說,任何只有 16 位代碼點的字符,這只是 Unicode 的基本多語言平面。 不幸的是,我不知道。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM