UTF-8字符的属性

时间:2015-06-14 18:36:03

标签: c++ utf-8 ncurses

Ncurses可以通过chtype显示带有附加属性的字符,这些字符是由具有属性位掩码的单个字符构成的:

addch('a' | A_REVERSE);

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

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

2 个答案:

答案 0 :(得分:2)

实际上有四种字符类型可以与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值。

答案 1 :(得分:1)

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

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