4

jsch を使用して、ローカル ssh サーバーから ssh 出力を取得しています。

出力をテキストボックスに表示すると、出力にこれらすべての奇妙な文字列が表示されます。たとえば、次のようになります。

]0;~/rails_sites/rex_raid

[32mRob@shinchanii [33m~/rails_sites/rex_raid[0m]

[33m と [0m は新しい色か何かの始まりを示し、]0;~ は改行を示していると思います。

これらの文字列の出力を解析するこれらの出力を取り除くにはどうすればよいですか?

ここに私の出力がどのように見えるかの例(私からではありません):

http://www.google.de/codesearch#048v6jEeHAU/typescript&q=%5D0;~&l=1

4

3 に答える 3

4

これらは、実際には VT100 端末制御エスケープ シーケンスです。それらのリストはhttp://www.termsys.demon.co.uk/vtansi.htmにあります (リストが完全かどうかは不明です) 。

String の replaceAll メソッドを使用できます ( http://download.oracle.com/javase/1.4.2/docs/api/java/lang/String.html#replaceAll%28java.lang.String,%20java.lang.String %29 )、すべての有効な VT100 エスケープ シーケンスに一致する正規表現を作成します。ただし、正規表現を作成するときは、角括弧の前に印刷できない ESC 文字 (Unicode では \u001B) があることを忘れないでください。

于 2011-08-26T14:24:08.323 に答える
1

私もJSchを使用していますが、同じ問題が発生しています。

参考までに、JSch では、接続前の Channel.setPtyType("ansi") で ansi 色を削除できるため、出力が Windows で受け入れられるようになります。

この設定がすべてのリモート Linux/Unix サーバーで互換性があるかどうかはわかりません

于 2015-09-03T09:28:40.020 に答える
1

これらはANSI エスケープ シーケンスです。ご想像のとおり、これらは端末によって実装され、色やフォント属性の 1 つを変更するように表示されます。(エスケープ文字 (ASCII 27) で始まりますが、これはテキスト ボックスに表示されない可能性があります。)

  1. これを行う正しい方法は、ターミナルがない (またはダムの) ターミナルがない場合、シェルがこれらのコードを出力しないようにすることです。しかし、それらはしばしばスクリプトでハードコードされているため (少なくとも私のアカウントでは、プロンプトの色は でハードコードされています.bashrc)、これは簡単ではないかもしれません。

  2. これらのコードを解析して、それらを取り除くか、解釈することもできます (テキストボックスをカラフルにするため)。最後の部分を実装し始めたことがありますが、既存の実装が存在する可能性があると思います。

于 2011-08-26T14:26:34.647 に答える