UTF-8 字符的属性
Attributes for UTF-8 characters
Ncurses 可以通过 chtype
s 显示带有附加属性的字符,这些字符是通过或运算具有属性位掩码的单个字符构造而成的:
addch('a' | A_REVERSE);
但是,启用UTF-8支持后,必须通过addstr(char const*)
将多字节字符推送到屏幕,并且没有属性空间。
是否可以保留多字节字符的属性,或者我应该自己跟踪它们并在需要时使用 attron()
/attroff()
?
如果您的 ncurses 支持宽字符,那么您可以使用 add_wch
之类的例程来添加单个宽字符,可以选择使用属性。但是,宽字符与多字节字符不同;您需要将多字节序列转换为宽字符才能将它们与 add_wch
.
一起使用
查看标准库函数 mbtowc
和 mbstowcs
,以及它们的可重入变体。
实际上有四种字符类型可以与 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
值。
Ncurses 可以通过 chtype
s 显示带有附加属性的字符,这些字符是通过或运算具有属性位掩码的单个字符构造而成的:
addch('a' | A_REVERSE);
但是,启用UTF-8支持后,必须通过addstr(char const*)
将多字节字符推送到屏幕,并且没有属性空间。
是否可以保留多字节字符的属性,或者我应该自己跟踪它们并在需要时使用 attron()
/attroff()
?
如果您的 ncurses 支持宽字符,那么您可以使用 add_wch
之类的例程来添加单个宽字符,可以选择使用属性。但是,宽字符与多字节字符不同;您需要将多字节序列转换为宽字符才能将它们与 add_wch
.
查看标准库函数 mbtowc
和 mbstowcs
,以及它们的可重入变体。
实际上有四种字符类型可以与 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
值。