java实现的telnet功能到windows为啥输出的是乱码啊?
代码如下
package org.metarnet.bmcif.telnet;
import java.io.InputStream;
import java.io.PrintStream;
import org.apache.commons.net.telnet.TelnetClient;
import org.apache.commons.net.telnet.TerminalTypeOptionHandler;
import org.apache.commons.net.telnet.*;
import org.apache.log4j.Logger;
public class TelnetHandler {
private static final Logger logger = Logger.getLogger(TelnetHandler.class);
private TelnetClient telnet = new TelnetClient();
private InputStream in;
private PrintStream out;
private String prompt ;
String s;
public void TelnetCmd( String server, String user, String password,String cmd){
try {
// Connect to the specified server
telnet.connect( server, 23 );
logger.info("Login............................");
// Get input and output stream references
in = telnet.getInputStream();
out = new PrintStream( telnet.getOutputStream());
//Login
readUntil( "login: " );
write( user );
readUntil( "assword: " );
write( password );
// Advance to a prompt
prompt = ">";
readUntil( prompt );
//Exec Cmd
sendCmd(cmd);
}catch( Exception e ) {
e.printStackTrace();
logger.info("logon failed",e);
}
}
public String readUntil( String pattern ) {
try {
char lastChar = pattern.charAt( pattern.length() - 1 );
StringBuffer sb = new StringBuffer();
//boolean found = false;
char ch = ( char )in.read();
while( true ) {
System.setProperty("GBK","iso8859-1");
System.out.print( ch );
sb.append( ch );
if( ch == lastChar ) {
if( sb.toString().endsWith( pattern ) ) {
//System.out.print( sb.toString());
return sb.toString();
}
}
ch = ( char )in.read();
}
}catch( Exception e ) {
e.printStackTrace();
}
return null;
}
public void write( String value ) {
try {
out.println( value );
out.flush();
System.out.println( value );
}
catch( Exception e ) {
e.printStackTrace();
}
}
public String sendCmd( String command ) {
try {
prompt = ">";
write( command );
return readUntil( s+prompt );
}catch( Exception e ) {
e.printStackTrace() ;
}
return null;
}
public void disconnect() {
try {
telnet.disconnect();
}catch( Exception e ) {
e.printStackTrace();
}
}
public static void main( String[] args ) {
try {
logger.info("发送命令开始");
TelnetHandler telnet = new TelnetHandler();
telnet.TelnetCmd("*****", "*****", "*****","dir");
logger.info("发送命令结束");
telnet.disconnect();
}catch( Exception e ) {
e.printStackTrace();
}
}
}
输出乱码如下
[1;1H[K[2;1H[K[3;1H[K[4;1H[K[5;1H[K[6;1H[K[7;1H[K[8;1H[K[9;1H[K[10;1H[K[11;1H[K[12;1H[K[13;1H[K[14;1H[K[15;1H[K[16;1H[K[17;1H[K[18;1H[K[19;1H[K[20;1H[K[21;1H[K[22;1H[K[23;1H[K[24;1H[K[25;1H[K[1;1H[1;1H*