项目场景:jcraft 的sftp上传下载文件时遇到中文目录乱码的问题
获取远程的路径的时候遇到中文目录然后显示乱码
问题描述
使用了jsch里面自带的channelSftp.setFilenameEncoding(“GBK”);并没有起作用
原因分析:
查看了源码才知道在3-5的版本之间编码必须是utf8.
public void setFilenameEncoding(String encoding) throws SftpException {
int sversion = this.getServerVersion();
if (3 <= sversion && sversion <= 5 && !encoding.equals("UTF-8")) {
throw new SftpException(4, "The encoding can not be changed for this sftp server.");
} else {
if (encoding.equals("UTF-8")) {
encoding = "UTF-8";
}
this.fEncoding = encoding;
this.fEncoding_is_utf8 = this.fEncoding.equals("UTF-8");
}
}
解决方案:
需要用反射将版本号修改了就可以正常运行,我这边是将版本改成了2
Field serverVersion = channelSftp.getClass().getDeclaredField("server_version");
serverVersion.setAccessible(true);
serverVersion.set(channelSftp, 2);
channelSftp.setFilenameEncoding("GBK");