屏幕上字符的“宽度”

时间:2019-04-08 03:41:33

标签: c++ ncurses codepoint

我正在使用Ncurses编写文本编辑器。我想知道是否有一种方法可以确定屏幕上可以放置多少个不同的字符,每个字符都使用UTF-8编码。例如,当我获得10的屏幕宽度和一行时,我可以输入10个宽度为1的字符,其值如下:

0123456789

但是当我想整排笑脸时,我只能在10号屏幕上放4张:

因此,在此示例中,笑脸在屏幕上的宽度为2.5。我想知道有没有一种方法可以确定屏幕上字符的宽度?

1 个答案:

答案 0 :(得分:0)

ncurses使用wcwidth确定 wchar_t 中的“宽字符”(通常是Unicode值)使用的列数。这可能与终端实际执行的操作不同,但是如果您的语言环境(LC_CTYPE等)的设置与终端的功能和配置一致,则结果是相当一致的。

尽管wcwidth是一个标准函数,但它尚未完全标准化(我可以讲题)。大多数实现都使用定期更新的表(一种问题源),终端仿真器可能/可能不一致,并且 字体 可能与{{1 }}。

考虑到所有这些,您始终可以通过写入未显示的窗口来询问ncurses(或X / Open Curses的其他实现)在屏幕上使用多少列。 Lynx例如在LYStrExtent0中这样做:

wcwidth