使用JSch时为什么会看到scrabbled输出?
我正在尝试使用JSch
。 我试过这里的例子虽然我可以连接输出很奇怪。
我得到以下内容:
Last login: Thu Jan 31 19:44:25 2013 from 10.2.251.77 [1mcli:~ # [m
如果我这样做,我得到:
[0m[01;34m.InstallAnywhere[0m [00m.bash_history [00m.bash_profile[0m [01;34mbin[0m [00msles11-patched[0m [01;34m.kbd[0m [00mindex.html[0m [00mtest.sql[0m [00m.viminfo[0m [00;31mipvsadm-1.26-1.src.rpm[0m [m[1mcli:~ # [m
这些是目录内容,但为什么会这样显示?
我在Eclipse中运行这个,这是我在Eclipse输出中看到的。 如果我从Windows CMD
运行它,它会卡住
更新:
我注意到如果我连接到不同的linux输出就好了!
只有当我连接到特定的Linux安装时,我才会看到这些奇怪的角色! 知道是什么导致了这个吗?
UPDATE2:
按照@PeterMmm的链接,我做了printf "äöü" | xxd
printf "äöü" | xxd
。 “坏”和好的都给出了:
0000000: e4f6 fc
我也做过locale
。
在“坏”的情况下:
# locale LANG=POSIX LC_CTYPE=en_US.UTF-8 LC_NUMERIC="POSIX" LC_TIME="POSIX" LC_COLLATE="POSIX" LC_MONETARY="POSIX" LC_MESSAGES="POSIX" LC_PAPER="POSIX" LC_NAME="POSIX" LC_ADDRESS="POSIX" LC_TELEPHONE="POSIX" LC_MEASUREMENT="POSIX" LC_IDENTIFICATION="POSIX" LC_ALL=
在良好的系统中:
LANG=POSIX LC_CTYPE=en_US.UTF-8 LC_NUMERIC="POSIX" LC_TIME="POSIX" LC_COLLATE="POSIX" LC_MONETARY="POSIX" LC_MESSAGES="POSIX" LC_PAPER="POSIX" LC_NAME="POSIX" LC_ADDRESS="POSIX" LC_TELEPHONE="POSIX" LC_MEASUREMENT="POSIX" LC_IDENTIFICATION="POSIX" LC_ALL=
配置似乎是一样的。 那可能是什么导致了这个?
请检查Funny Shell Output:[01; 32mtestfile.txt [00m而不是testfile.txt
((ChannelShell) channel).setPtyType("dumb");
诀窍。
它们是终端仿真的转义序列。 我猜这与字符编码没有关系。
更新:如果调用ChannelShell#setPty(false),将不会分配伪终端并且不会出现转义序列。
Channel channel=session.openChannel("shell"); ((ChannelShell)channel).setPty(false); // !! ... channel.connect();