gpt4 book ai didi

javascript - 我如何计算各种字符的终端列宽?

转载 作者:行者123 更新时间:2023-11-30 08:39:37 25 4
gpt4 key购买 nike

我正在计算终端 View 中各种打印和非打印 ascii/unicode 字符将占用的终端列数。

例如,水平制表符(\t)占8列,颜色代码(即\x1b32m)占0列,固定大小的宽字符串(即 한) 可能占据 2 列。当然,在初级 ASCII 集中有很多只占 1 列(即 a-Z/0-9、标点符号等)。

我遇到了 node.js 模块,wcwidth ,这似乎有助于计算宽字符字符串,但对于其他字符(如颜色代码和制表符)却没有达到我的预期。

例如:

var wcwidth = require('wcwidth');

console.log("TAB WIDTH", wcwidth('\t'));
console.log("한 WIDTH", wcwidth('한'));
console.log("Color Code WIDTH", wcwidth('\x1b32m'));
console.log("X WIDTH", wcwidth('X'));

输出:

TAB WIDTH 0
한 WIDTH 2
Color Code WIDTH 3
X WIDTH 1

我似乎无法在任何地方找到有关此的任何信息,但我认为这将是人们在古代必须解决的常见问题。

如果有可能使用 bash 脚本或任何库、应用程序或工具,我也完全愿意接受。

非常感谢任何帮助! :)谢谢

最佳答案

一个tab不占8列。它输出一个空格,然后输出足够的空格,以确保下一个字符将输出到索引为 0 mod 8(如果从 1 开始计算,则为 1 mod 8)的下一列。换句话说,您无法判断一个字符的宽度。选项卡是除非你知道你在线的位置。

颜色代码 (\x1b[32m) 可能占用零空间,但也可能不占用;这取决于控制台终端仿真器的性质。大多数终端仿真器将识别 CSI[Pm 代码,但还有其他代码更加特殊。例如,

printf $'\x1b]2;A window\x1b\\'

将在 xterm 中设置窗口标题,因此不会产生任何输出。但在 Linux 控制台中,文本 ;A window 将被显示,占用 9 个字符。

总之,这不是一个简单的问题,因为没有绝对的答案,所以你只能结合很多上下文来回答。

关于javascript - 我如何计算各种字符的终端列宽?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27892047/

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