【问题标题】:jQuery terminal - Reading shell response in Java as string shows weird characters in jQuery terminaljQuery 终端 - 以字符串形式读取 Java 中的 shell 响应会在 jQuery 终端中显示奇怪的字符
【发布时间】:2018-11-29 14:32:07
【问题描述】:

我目前正在使用管道输入/输出流原理通过 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:

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

目前看起来像这样:

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

【问题讨论】:

  • 由于 jQuery Terminal 支持有限数量的 ANSI 转义码,你可以只包含 unix_formatting.js 文件。
  • @MartinPrikryl 您可以重新打开,因为问题出在前端,而重复的是与 html 无关的 UI 文本字段。
  • 我关闭了这个问题,因为可能的重复线程将我带到了 jQuery 的终端 unix_formatting.js。我导入了文件,它有点固定。但它并没有完全修复,因为 unix_formatting.js 支持有限数量的 ANSI 转义码。
  • 使用 unix_formatting 你只能有静态输出,如果你想要真正的 tty 你可以试试 xterm.js 看看我的回答。

标签: java jsch jquery-terminal


【解决方案1】:

您遇到的问题是,默认情况下 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

【讨论】:

  • 感谢您的 xterm 参考。我认为这就是解决方案。但是我尝试实现它,但我最终遇到了一个奇怪的情况。每当我在终端中键入一个键时,它都会直接将其写入服务器。这是一个 gif:i.imgur.com/gP82rwX.gif 这就是我设置终端的方式:hastebin.com/udobequheh.html 我做错了什么?
  • 没关系,我让一切都像魅力一样工作。我最终得到了这个脚本:hastebin.com/yowigijipe.html 使用 xterm 是正确的解决方案。
猜你喜欢
  • 2012-02-13
  • 1970-01-01
  • 2017-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多