我正在使用pty4j库构建一个简单的终端模拟器。我的程序有一个print()方法,它使用javafx的GraphicsContext.fillText()方法将文本呈现到画布上。我将模拟器连接到cmd的一个实例,并从缓冲的读取器中读取ouptput。现在,不幸的是,当它收到文本时,它还包括ANSI-转义字符 (见图)。但是,如果我将输出输出打印到IDE或系统控制台,则可以正常工作。

我尝试使用来自readLine()的BufferedReader方法,然后应用regex,但是因为不是所有从终端接收到的输入都被\n终止,所以它阻塞在最后一行。
Thread terminalReaderThread = new Thread() {
public void run() {
try {
int c;
while (terminal.isRunning() && (c = terminal.getReader().read()) != -1) {
if(c != 0){
print(Character.toString((char)c));
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
};
terminalReaderThread.start();有没有一种有效的方法从inputStream过滤这些转义码?
发布于 2022-03-17 10:03:05
我收到的对我的问题(安全忽略未知ANSI,ESC/P,ESC/POS序列,知道长度)的回答也应该回答你的问题。如果您阅读标准(ECMA-48 1991.pdf),您将看到序列总是从转义字符开始,并且始终以一个最终字节结束,该字节的值来自定义的范围。有了这些信息,就足以检测每个序列的开始和结束。(例如regex)(在转义序列中也不允许换行符(和其他C0代码),因此永远不会有转义序列不完全位于一行内)。
https://stackoverflow.com/questions/60480487
复制相似问题