给定终端/tty的列+行,如何计算可以容纳的min/max字节数

Given column + rows of a terminal / tty, how to calculate min/max number of bytes that can fit

假设我们使用 node.js:

获取终端的当前列和行
console.log('rows:', process.stdout.rows);
console.log('columns:', process.stdout.columns);

有没有办法计算终端可以容纳的字节数window?我的意思是我猜它是行*列,但我真的不知道。

我的猜测是 rows*columns 是可以容纳的 max 字节数,但实际上,它可能更少,并不准确。

最大数量取决于 window 的标称大小(行乘以列)以及字符单元格的 编码方式 。节点应用程序假定所有内容都编码为 UTF-8,这意味着每个单元格可以是 4 个字节(例如,参见 this answer)。

除此之外,您必须允许在每行末尾换行(除非您一直依赖 line-wrapping)。换行符是一个字节。

所以...

(1 + ) * * 4

作为第一个近似值。

如果您考虑组合字符,这可能会增加估计值,但是(参见this answerthat[=34]的限制=] 定义不明确。实际上,这些在欧洲字符中很少使用,但在一些亚洲字符中使用 (ymmv)。