ESC[ (0x1b/0x5b) 序列内的空格字符使序列无效?



我找不到有关应该对ESC序列中的空格执行哪些操作的信息。示例:位置光标

ESC[10;20H

是一个有效的 ESC 序列,但它是包含空格的序列,例如

ESC[ 10; 20H

也有效?关键是,虽然 ESC 字符是带有代码0x1b的控制字符,但它后面的文本是人类和机器可读的文本,并且在一般空间中不应损害 ESC 序列的含义,因此我只会删除在 ESC 序列中找到的所有空格。

互联网上有很多文章谈论ESC序列是什么以及它们可能由什么组成(但是只有少数好的和真正有用的),但没有一篇澄清这个问题。

我找到了这个,它说

由于 ASCII 控制函数不遵循结构化语法,因此用于描述函数序列和参数的表示法对于避免混淆非常重要。转义序列在每个字符之间显示一个空格,以使其更易于阅读。这些空格不是转义序列的一部分。

虽然它说空格字符分隔字符以提高可读性,但他们没有说保持空格是否会使 ESC 序列无效。

是否有任何相关的 RFC?我希望它能明确地定义这种情况。

更新:感谢托马斯指出空格字符是 ESC 序列运算符之一。所以现在很明显 [ 应该遵循 ESC 字符,并且它们之间不允许有空格。

但是,以下论点是什么?如上例所示,行和列中的空格坐标为 ESC[SP10;SP20H 使序列无效,我必须停止处理它开始显示空格字符?

更新1:我使用Windows远程登录应用程序进行了小测试。登录到远程服务器,该服务器以 ESC 序列进行响应。结果是:

正确ESC[2;5H位置 第 2 行第 5 列

ESC[ 2; 5H显示"2;当前光标位置为 5H">

ESC[2 ; 5H显示";当前光标位置为 5H">

因此,根据经验发现,我怀疑不允许使用空格,并且空格字符会使序列无效/取消。

ECMA-48是查找的地方(如果你想要一个RFC)。 查找提及02/00(它表示十六进制0x20空格的方式)。

值得一提的是,有带有嵌入式空间的 DEC 控制序列(VT220 及以上),例如,标有SP的那些:

Controls beginning with ESC
This excludes controls where ESC  is part of a 7-bit equivalent to 8-bit
C1 controls, ordered by the final character(s).
ESC SP F  7-bit controls (S7C1T), VT220.
ESC SP G  8-bit controls (S8C1T), VT220.
ESC SP L  Set ANSI conformance level 1 (dpANS X3.134.1).
ESC SP M  Set ANSI conformance level 2 (dpANS X3.134.1).
ESC SP N  Set ANSI conformance level 3 (dpANS X3.134.1).

在您的示例中,空格只是为了提高可读性,非打印字符(如 ASCII转义(十进制 27,十六进制 01xb)由ESC等名称显示。

相关内容

  • 没有找到相关文章

最新更新