Ncurses可以通过chtype
显示带有附加属性的字符,这些字符是由具有属性位掩码的单个字符构成的:
addch('a' | A_REVERSE);
但是,在启用UTF-8支持后,必须通过addstr(char const*)
将多字节字符推送到屏幕,并且没有属性空间。
是否有可能使用多字节字符保留属性,或者我应该自己跟踪它们并在需要时使用attron()
/ attroff()
?
答案 0 :(得分:2)
实际上有四种字符类型可以与ncurses一起使用:
char
(适用于waddstr
)chtype
(适用于waddchstr
)wchar_t
(适用于waddnwstr
)cchar_t
(适用于wadd_wchstr
)对于8位编码,char
和chtype
数据排在第一位。 wchar_t
和cchar_t
后来出现了广角字符。每对中的后者基本上是前者与视频属性和颜色相结合。
ncurses与X / Open curses的不同之处在于允许通过waddstr
(和waddch
)接口添加多字节字符。实际上这将是“ ncursesw ”库(“ ncurses ”库执行8位编码)。
wchar_t
比char
保留更多位。
在Linux上,wchar_t
(几乎)与Unicode同义。这不一定是可移植的,因此ncurses使用wide-character functions根据需要将wchar_t
转换为UTF-8 - 或者终端用于编码的任何内容。同样,waddstr
的输入可能是UTF-8,但是ncurses使用相应的多字节字符函数将应用程序的语言环境编码转换为wchar_t
值。
答案 1 :(得分:1)
如果您的ncurses支持宽字符,那么您可以使用add_wch
之类的例程来添加单个宽字符,可选择添加属性。但是,宽字符不与多字节字符相同;您需要将多字节序列转换为宽字符,以便将它们与add_wch
一起使用。
请参阅标准库函数mbtowc
和mbstowcs
,以及它们的可重入变体。