0

我找不到有关应该对 ESC 序列中的空格做什么的信息。示例:定位光标

ESC[10;20H

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

ESC[ 10; 20H

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

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

我找到了这个,上面写着

由于 ASCII 控制函数不遵循结构化语法,因此用于描述函数序列和参数的符号对于避免混淆很重要。转义序列显示为每个字符之间有一个空格,以便于阅读。这些空间不是 Escape 序列的一部分。

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

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

更新:感谢 Thomas 指出 space char 是 ESC 序列运算符之一。所以现在很清楚 [ 应该跟随 ESC 字符,并且它们之间不允许有空格。

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

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

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

ESC[ 2; 5H在当前光标位置显示“2; 5H”

ESC[2 ; 5H在当前光标位置显示“; 5H”

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

4

1 回答 1

0

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.

于 2018-04-09T08:21:51.733 回答