UTF-8 字符的属性
Attributes for UTF-8 characters
Ncurses 可以通过 chtype
s 显示具有附加属性的字符,这些字符是通过或将具有属性位掩码的单个字符构造
addch('a' | A_REVERSE);
但是,在启用 UTF-8 支持后,必须通过 addstr(char const*)
将多字节字符推送到屏幕,并且没有属性的空间。
是否有可能保留带有多字节字符的属性,或者我应该自己跟踪它们并在需要时使用 attron()
/attroff()
?
实际上有四种字符类型可以与 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 根据需要使用宽字符函数从wchar_t
转换为 UTF-8 - 或者终端用于编码的任何内容。 同样,waddstr
的输入可能是 UTF-8,但 ncurses 使用相应的多字节字符函数将应用程序的区域设置编码转换为wchar_t
值。
如果您的 ncurses 支持宽字符,则可以使用 add_wch
等例程添加单个宽字符,可以选择使用属性。但是,宽字符与多字节字符不同;您需要将多字节序列转换为宽字符才能将它们与 add_wch
一起使用。
请参阅标准库函数mbtowc
和mbstowcs
,以及它们的可重入变体。
- C++字符*缓冲区的大小
- HEX值到wchar_t字符(UTF-8)的转换
- 如何导出包含具有"std::unique_ptr"值的"std::map"属性的
- 为什么 Serial.println(<char[]>);返回随机字符?
- 我的字符计数代码计算错误.为什么
- 字符串-C++后显示的随机字符
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 如何在C++中从字符串中分割字符
- 为什么msgrcv()将垃圾字符馈送到缓冲区
- 指向指向字符数组的指针数组的指针
- 如何用转义符替换字符串中的所有特殊字符
- 为什么 sscanf 无法从一个字符串中读取uint64_t和字符?
- C++概念:如何使用'concept'检查模板化结构的属性?
- 为什么我不能更改结构的字符数组属性?
- 在C++中使用字符指针将字符串保存到类属性
- TinyXML无法将属性与字符进行比较
- 返回具有常量字符* 属性的结构
- 提升精神继承的字符串属性填充<int> ASCII 字符中的向量
- 在向富文本框写入数据时获取字符代码而不是字母text属性
- UTF-8 字符的属性