【问题标题】:Attributes for UTF-8 charactersUTF-8 字符的属性
【发布时间】:2015-06-14 18:36:03
【问题描述】:

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

addch('a' | A_REVERSE);

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

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

【问题讨论】:

    标签: c++ utf-8 ncurses


    【解决方案1】:

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

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

    ncurses 与 X/Open 诅咒的不同之处在于允许通过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 值。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2020-07-25
        • 2012-01-09
        • 1970-01-01
        • 2011-04-19
        • 1970-01-01
        • 2012-02-16
        • 2012-01-14
        • 1970-01-01
        相关资源
        最近更新 更多