UTF-8 字符的属性

Attributes for UTF-8 characters

本文关键字:属性 字符 UTF-8      更新时间:2023-10-16

Ncurses 可以通过 chtype s 显示具有附加属性的字符,这些字符是通过或将具有属性位掩码的单个字符构造

的:
addch('a' | A_REVERSE);

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

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

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

  • charwaddstr
  • chtypewaddchstr
  • wchar_twaddnwstr
  • cchar_twadd_wchstr

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

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

wchar_tchar拥有更多的位。

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

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

请参阅标准库函数mbtowcmbstowcs,以及它们的可重入变体。