1、
当使用jsch设置编码格式时
sftp.setFilenameEncoding("GBK");
出现如下错误:The encoding can not be changed for this sftp server。
使用的jar包是:jsch-0.1.54,经查看源码发现,版本是3-5的,都不支持设置文件名编码格式。
1.1、
public void setFilenameEncoding(String encoding) throws SftpException{ int sversion=getServerVersion(); if(3 <= sversion && sversion <= 5 && !encoding.equals(UTF8)){ throw new SftpException(SSH_FX_FAILURE, "The encoding can not be changed for this sftp server."); } if(encoding.equals(UTF8)){ encoding=UTF8; } fEncoding=encoding; fEncoding_is_utf8=fEncoding.equals(UTF8); }
1.2、解决方式:使用反射修改server_version的默认值即可。
JSch jsch = new JSch(); jsch.addIdentity("provateKey"); Session session = jsch.getSession("userName", "serverIp",“port”); Properties config = new Properties(); config.put("StrictHostKeyChecking", "no"); session.setConfig(config); session.connect(); ChannelSftp channelSftp = (ChannelSftp)session.openChannel("sftp"); channelSftp.connect();
// ZC: 下面就是 利用反射 设置 的代码 Class cl = channelSftp.class; Field f1 =cl.getDeclaredField("server_version"); f1.setAccessible(true); f1.set(sftp, 2); channelSftp.setFilenameEncoding("gbk");
2、
3、
4、
5、