jQuery 终端 - 在 Java 中读取 shell 响应,因为字符串在 jQuery 终端中显示奇怪的字符

jQuery terminal - Reading shell response in Java as string shows weird characters in jQuery terminal

我目前正在使用管道 input/output 流原理来使用 JSCH 读取和写入 shell 通道。

问题:当我将 shell 的响应传输到 jQuery 终端时,我的 jQuery 终端出现奇怪的字符。

奇怪的字符(jQuery终端):

我尝试以不同的方式读取管道输入流来解决问题:

尝试 1:

private synchronized String readResponse() throws IOException {
    byte[] array = new byte[pin.available()];
    pin.read(array);
    return new String(array, Charset.forName("UTF-8"));
}

尝试 2:

private synchronized String readResponse() throws IOException {
        final StringBuilder s = new StringBuilder();
        while(pin.available() > 0) {
            s.append((char) pin.read());
        }
        return s.toString();
    }

遗憾的是这个问题仍然存在。谁能帮帮我?

更新: 我刚刚发现,当我在 Java 输出控制台中打印相同的字符串时,它有效。

Java 的 System.out:

更新二: 我已经导入了 unix_formatting.js 文件,它几乎已修复。这个文件的问题是它对 unix 转义码的支持有限。 Link 到 js:https://unpkg.com/jquery.terminal@1.23.2/js/unix_formatting.js

目前看起来像这样:

如何在 jQuery 终端中解决这个问题?

您遇到的问题是默认情况下 jQuery 终端不支持 ANSI 转义码,但您可以通过包含 unix_formatting.js 文件来启用基本支持,该文件是使用 UMD 创建的,因此你可以导入它并将它放在 Webpack 或 Rollup 包中,或者使用脚本标签包含它:

最简单的是使用 unpkg.com:

<script src="https://unpkg.com/jquery.terminal/js/unix_formatting.js"></script>

您也可以使用与主文件相同的 CDN(jsDeliver 或 cdnJS)

我认为 cdn.rawgit.com 会一直工作到 2019 年 10 月,所以最好不要使用那个。

但是,jQuery 终端无法做到的一件事是您将永远无法在浏览器的终端中显示交互式 shell 命令。该库是为在 JavaScript 中编写您自己的命令而创建的,基本支持 unix_formatting 文件中的 shell 命令。

如果你想在浏览器中拥有完整的 unix 终端,更好的选择是 xterm.js,这是真正的 tty。如果你可以 运行 服务器,如果你是 运行 宁 java 你可能可以,那么 xterm.js 会好得多。您甚至可以 运行 viemacs -nw 使用它。