gpt4 book ai didi

c++ - 屏幕上字符的 "Width"

转载 作者:行者123 更新时间:2023-11-28 04:20:26 27 4
gpt4 key购买 nike

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

0123456789

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

😊😊😊😊

所以在这个例子中,笑脸在屏幕上的宽度为 2.5。我想知道有没有办法确定屏幕上字符的宽度?

最佳答案

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

同时 wcwidth是一个标准函数,它是不完全标准化的(我可以离题)。大多数实现使用定期更新的表格(问题的来源之一),终端仿真器可能/可能不一致,字体 可能与 中的值不对应wcwidth.

考虑到所有这些,您始终可以询问 ncurses(或 X/Open Curses 的其他一些实现)通过写入一个您不显示的窗口,它将使用屏幕上的多少列。例如,Lynx 在 LYStrExtent0 中执行此操作:

/*
* Determine the number of cells the given string would take up on the screen,
* limited (in the case of wide characters) by the maxCells parameter.
*
* If the returnCellNum parameter is TRUE, return the number of cells;
* otherwise, return the length (limited by the len parameter) of the prefix of
* the string that fits in maxCells cells.
*/

关于c++ - 屏幕上字符的 "Width",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55565935/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com