我找不到有关ESC序列中应该对空格做什么的信息。示例:位置光标
ESC[10;20H
是一个有效的ESC序列,但是包含
之类的空格 ESC[ 10; 20H
也有效吗?关键是当ESC字符是一个代码为0x1b的控制字符时,其后面的文本是人和机器可读的文本,一般来说空格不应该损害ESC序列的含义,因此我只删除ESC序列中找到的所有空格
互联网上有很多关于ESC序列是什么以及它们可能包含什么的文章(但是只有少数好的和真正信息丰富的),但 none 澄清了这个问题。
我找到this one,并说
由于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”
因此,基于实证结果,我怀疑不允许使用空格,而空格char会使序列无效/取消。
答案 0 :(得分:0)
ECMA-48是值得关注的地方(如果你想要一个RFC)。请注意提及 02/00
(它表示空间的十六进制0x20的方式)。
对于它的价值,有DEC控制序列(VT220及以上)带有嵌入空间,例如marked with 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))通过名称显示,例如 {{1 }} 强>