【问题标题】:Garbled text while reading from external process in Java从 Java 中的外部进程读取时出现乱码
【发布时间】:2012-05-24 17:42:26
【问题描述】:

我正在使用 Java 中的 ProcessBuilder 类启动与 Cygwin 捆绑的 SSH 实用程序。一切正常。我通过 SSH 连接到 linux 服务器,可以运行命令并读取输出。

但是,无论何时返回输出,它只会在登录服务器并运行命令后发生,例如目录列表ls,返回如下内容:

InputStream: root@myserver:/scripts/common# ls 
InputStream: [00m[00mA1-4.yaml[00m                            [01;32mscip-1.2.0.linux.x86_64.gnu.opt.qso[00m
InputStream: [00madditional_files.txt[00m                 [01;32mscip-1.2.0.linux.x86_64.gnu.opt.spx[00m

据我所知,它只发生在文件列表命令中。例如,当我运行其他命令(如时间等)时,它会显示正常输出。

您能建议将这些随机字符附加到文件名的原因是什么吗?

我什至尝试使用 UTF8 编码,但没有任何改变。当我使用命令行直接登录时,我看不到这些结果。但是,cmdline 以彩色值显示文件名。是不是添加了一些不是ASCII的附加信息?

【问题讨论】:

  • 好的,我刚刚意识到确实如此。添加了打印成非 ascii 字符的短颜色代码值,因此原始输出在 cmdline 中看起来不错,它在检索到的文本中显示不同。调用这个: ls --color=none 它工作得很好。
  • 猜猜有人应该删除这个问题。谢谢
  • 您实际上应该为您的问题创建一个答案,因为它可能会在将来对某人有所帮助。

标签: java ls processbuilder


【解决方案1】:

使用命令ls --color=none 可以解决这个问题。

这是因为默认情况下 ls 命令返回附加了不同颜色代码值的文件名。 This link gives more information

下图描述lsls --color=none的区别:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-31
    • 2012-03-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多