UTF-8 字符的属性

Attributes for UTF-8 characters

Ncurses 可以通过 chtypes 显示带有附加属性的字符,这些字符是通过或运算具有属性位掩码的单个字符构造而成的:

addch('a' | A_REVERSE);

但是,启用UTF-8支持后,必须通过addstr(char const*)将多字节字符推送到屏幕,并且没有属性空间。

是否可以保留多字节字符的属性,或者我应该自己跟踪它们并在需要时使用 attron()/attroff()

如果您的 ncurses 支持宽字符,那么您可以使用 add_wch 之类的例程来添加单个宽字符,可以选择使用属性。但是,宽字符与多字节字符不同;您需要将多字节序列转换为宽字符才能将它们与 add_wch.

一起使用

查看标准库函数 mbtowcmbstowcs,以及它们的可重入变体。

实际上有四种字符类型可以与 ncurses 一起使用:

对于 8 位编码,charchtype 数据排在第一位。 wchar_tcchar_t 后来出现在宽字符上。每对中的后者本质上是前者与视频属性和颜色的结合。

ncurses 与 X/Open curses 的不同之处在于它允许通过 waddstr(和 waddch)接口添加多字节字符。实际上这将是“ncursesw”库(“ncurses”库执行 8 位编码)。

wchar_tchar.

拥有更多的位

在 Linux 上,wchar_t(几乎)是 Unicode 的同义词。这不一定是可移植的,因此 ncurses 使用 wide-character functions 根据需要从 wchar_t 转换为 UTF-8 — 或者终端用于其编码的任何内容。同样,waddstr 的输入可能是 UTF-8,但 ncurses 使用相应的多字节字符函数将应用程序的语言环境编码转换为 wchar_t 值。