sftp遍历中文文件名乱码
最近项目要实现SFTP功能,选择了JSCH的包,如果上传的文件路径中如果包含中文,使用ChannelSftp的ls方法列出目录下的所有文件信息时,就会出现乱码,谁遇到相同情况的,如果有解决方法,请告诉下,不胜感激!--------------------编程问答-------------------- 根据格式需要,转码 --------------------编程问答--------------------
ChannelSftp channel=(ChannelSftp)session.openChannel("sftp");
channel.connect();
//...
InputStream in = new InputStreamReader(channel.getInputStream(), "UTF-8");
上面的UTF-8,是编码集。
要看你们远程机器用的是什么了。
--------------------编程问答-------------------- 我做了个测试,代码是这样的,我按照ftp的方式,做了转换,没有任何作用,测试代码如下:
package test;
import java.util.Properties;
import java.util.Vector;
import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;
import com.jcraft.jsch.ChannelSftp.LsEntry;
public class TestSftp {
public static void main(String[] args) {
JSch jsch = new JSch();
Session sshSession;
try {
sshSession = jsch.getSession("impsv", "10.20.59.84", 22);
sshSession.setTimeout(500000);
System.out.println("Session created.");
sshSession.setPassword("56rt%^RT");
Properties sshConfig = new Properties();
sshConfig.put("StrictHostKeyChecking", "no");
sshSession.setConfig(sshConfig);
sshSession.connect();
System.out.println("Session connected.");
Channel channel = sshSession.openChannel("sftp");
channel.connect();
System.out.println("Opening Channel.");
ChannelSftp sftp = (ChannelSftp) channel;
String remotePath="/home/impsv/allTempMedia/666666/jiekou/111.xml";
int index = remotePath.lastIndexOf("/");
Vector<LsEntry> vector = sftp.ls(remotePath.substring(0, index));
sftp.setTerminalMode("binary".getBytes());
//sftp.setFilenameEncoding("utf-8");
for (LsEntry lsEntry : vector) {
System.out.println(new String(lsEntry.getFilename().getBytes("ISO-8859-1"),"GBK"));
//System.out.println(lsEntry.getFilename());
if(lsEntry.getFilename().equals(remotePath.substring(index+1, remotePath.length())))System.out.println("1");;
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
--------------------编程问答-------------------- 你知道你linux系统的编码集吗?
我觉得你们linux编码集是什么,下面这句就该设什么。
sftp.setFilenameEncoding("utf-8");
试下这样的组合?
1)
sftp.setFilenameEncoding("utf-8");
System.out.println(new String(lsEntry.getFilename().getBytes("utf-8"),"GBK"));
2)
sftp.setFilenameEncoding("utf-8");
System.out.println(lsEntry.getFilename()); --------------------编程问答-------------------- sftp.setFilenameEncoding("utf-8");
这种方法根本就不存在,不会的不要误导人 --------------------编程问答--------------------
不好意思。我在网上找的javadoc。
http://epaul.github.com/jsch-documentation/易做图.javadoc/com/jcraft/jsch/ChannelSftp.html#setFilenameEncoding(java.lang.String)
ChannelSftp类是有这个setFilenameEncoding方法的呀。。
如果我的回帖伤害到了你,只能说声对不起了。 --------------------编程问答--------------------
补充:Java , Web 开发