0

ESC シーケンス内のスペースに対して何をすべきかについての情報が見つかりません。例: 位置カーソル

ESC[10;20H

は有効な ESC シーケンスですが、次のようなスペースを含むものです

ESC[ 10; 20H

も有効?ポイントは、ESC 文字はコード 0x1b の制御文字ですが、それに続くテキストは人間と機械が読み取り可能なテキストであり、一般にスペースは ESC シーケンスの意味を損なうべきではないため、ESC シーケンス内で見つかったすべてのスペースを削除するだけです。 .

ESC シーケンスとは何か、およびそれらが構成されている可能性があることについて話しているインターネット上の記事はたくさんありますが (ただし、優れた、本当に有益なものはほとんどありません)、この問題を明確にするものはありません。

私はこれを見つけました、そしてそれは言います

ASCII 制御関数は構造化された構文に従っていないため、混乱を避けるために、関数シーケンスとパラメーターを記述するために使用される表記法が重要です。エスケープ シーケンスは、読みやすくするために各文字の間にスペースを入れて表示されます。これらのスペースは、エスケープ シーケンスの一部ではありません。

スペース char は読みやすさのために文字を区切ると言っていますが、スペースを保持すると ESC シーケンスが無効になるかどうかはわかりません。

それに関連するRFCはありますか?このケースを明確に定義することを願っています。

更新:スペース char が ESC シーケンス演算子の 1 つであることを指摘してくれた Thomas に感謝します。したがって、 [ は 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