[ssh2.jar包] 用SSH从终端读数据,由于颜色,引起乱码的问题。

zfangla 2010-06-23 10:56:44
我用ssh2.jar连接到Linux上发命令,并读取返回的字符串:

/* 开启Session(会话) */
_session = _connection.openSession();

int x_width = 90;
int y_width = 30;
/* 请求虚拟终端(伪终端) */
_session.requestPTY("dumb", x_width, y_width, 0, 0, null);
_session.startShell();

/* 初始化输入流,输出流 */
_inputStreamReceiver = _session.getStdout();
_outputStreamSender = _session.getStdin();

以前读取数据都没什么问题的,Linux的命令提示符颜色都是白色:
[root@DEVICE 19:29:26 ~]#

现在Linux的命令提示符是彩色的了:
[root@DEVICE 19:29:26 ~]#

结果通过输入流得到的信息是乱码:
[[1;32mroot[1;33m@[1;31mT300018663 19:29:26 [1;35m~[0m]#

有没有什么办法使终端提示符没有颜色啊?
...全文
327 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
或者使用正则表达式替换一下:

public class Test {

public static void main(String[] args) {
String str = "[[1;32mroot[1;33m@[1;31mT300018663 19:29:26 [1;35m~[0m]#";
str = str.replaceAll("\\x1b\\[[0-9]+(?:;[0-9]+){0,2}m", "");
System.out.println(str);
}
}
  • 打赏
  • 举报
回复
在 Linux 设置颜色需要使用 \e[1;32m 这样的格式,而 \e 就是 ASCII 码 27 的字符,也就是“ESC”,这个字符编码是就是 0x1B,所以你在 Windows 中读到 0x1B 这个乱码。
  • 打赏
  • 举报
回复
那把 PS1 环境变量改一下吧。
  • 打赏
  • 举报
回复
第一次遇到因为颜色出乱码的。
hoojo 2010-06-23
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 bao110908 的回复:]
或者使用正则表达式替换一下:


Java code
public class Test {

public static void main(String[] args) {
String str = "[[1;32mroot[1;33m@[1;31mT300018663 19:29:26 [1;35m~[0m]#";
str =……
[/Quote]
试试看

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧