我找不到有关应该对 ESC 序列中的空格做什么的信息。示例:定位光标
ESC[10;20H
是一个有效的 ESC 序列,但是是包含空格的序列
ESC[ 10; 20H
也有效?关键是,虽然 ESC 字符是代码 0x1b 的控制字符,但它后面的文本是人类和机器可读的文本,并且通常空格不应损害 ESC 序列的含义,因此我将删除在 ESC 序列中找到的所有空格.
互联网上的很多文章都在谈论 ESC 序列是什么以及它们可能由什么组成(但是只有少数好的和真正信息丰富的),但没有一篇能澄清这个问题。
我找到了这个,上面写着
由于 ASCII 控制函数不遵循结构化语法,因此用于描述函数序列和参数的符号对于避免混淆很重要。转义序列显示为每个字符之间有一个空格,以便于阅读。这些空间不是 Escape 序列的一部分。
虽然它说空格字符分隔字符以提高可读性,但他们没有说保留空格是否会使 ESC 序列无效。
是否有任何相关的 RFC?我希望它明确地定义了这种情况。
更新:感谢 Thomas 指出 space char 是 ESC 序列运算符之一。所以现在很清楚 [ 应该跟随 ESC 字符,并且它们之间不允许有空格。
但是,以下论点是什么?如上例,行列中的空格坐标 ESC[ SP
10; SP
20H 使序列无效,我必须停止处理它开始显示空格字符吗?
Update1:我使用 Windows telnet 应用程序进行了小测试。登录到远程服务器,该服务器以 ESC 序列响应。结果是:
ESC[2;5H
正确定位第 2 行第 5 列
ESC[ 2; 5H
在当前光标位置显示“2; 5H”
ESC[2 ; 5H
在当前光标位置显示“; 5H”
因此,根据经验发现,我怀疑不允许使用空格,并且空格字符会使序列无效/取消。