JSch SFTP 传输更改编码
JSch SFTP transfer changes encoding
我正在使用 JSch 将 UTF-8 编码的 XML 文件从 Windows 机器 运行 Bitvise SSH 服务器传输到我 linux 机器上的本地目录(Ubuntu) 使用以下代码:
// Open JSch session
JSch jsch = new JSch();
session = jsch.getSession("username", "host", 22);
session.setPassword("password");
session.setConfig("StrictHostKeyChecking", "no");
session.setTimeout(5 * 60 * 1000);
session.connect();
// Open SFTP Connection
ChannelSftp sftpChannel = (ChannelSftp)session.openChannel("sftp");
sftpChannel.connect();
// Download the XML File to a local directory
byte[] buffer = new byte[1024];
final BufferedInputStream bis = new BufferedInputStream(sftpChannel.get("file.xml", new DeliveryProgressMonitor()));
final BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(targetFile));
int readCount = -1;
while( (readCount = bis.read(buffer)) > 0) {
bos.write(buffer, 0, readCount);
}
// Closing + Cleanup of resources
我确认正在检索的文件以 UTF-8 格式存储在服务器上,没有 BOM,并且 äöü
等字符已正确编码。
使用上面的代码传输文件后,文件在目标机器上仍然是 UTF-8 编码(file -bi
输出 application/xml; charset=utf-8
),但是查看文件的内容我可以看到äöü
不再可读,并已转换为 ü
.
等字符序列
同样的问题也发生在
的示例程序中
http://www.jcraft.com/jsch/examples/Sftp.java.html
以及使用 scp 命令行时。
使用相同的 Java 代码将文件传输到我的开发机器 运行 Windows 10 保持文件完整。
无论客户端计算机使用何种操作系统,如何确保编码保持不变?
正如 VGR 在上面的评论中指出的那样,传输工作正常,只是编辑器使用错误的编码打开文件
我正在使用 JSch 将 UTF-8 编码的 XML 文件从 Windows 机器 运行 Bitvise SSH 服务器传输到我 linux 机器上的本地目录(Ubuntu) 使用以下代码:
// Open JSch session
JSch jsch = new JSch();
session = jsch.getSession("username", "host", 22);
session.setPassword("password");
session.setConfig("StrictHostKeyChecking", "no");
session.setTimeout(5 * 60 * 1000);
session.connect();
// Open SFTP Connection
ChannelSftp sftpChannel = (ChannelSftp)session.openChannel("sftp");
sftpChannel.connect();
// Download the XML File to a local directory
byte[] buffer = new byte[1024];
final BufferedInputStream bis = new BufferedInputStream(sftpChannel.get("file.xml", new DeliveryProgressMonitor()));
final BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(targetFile));
int readCount = -1;
while( (readCount = bis.read(buffer)) > 0) {
bos.write(buffer, 0, readCount);
}
// Closing + Cleanup of resources
我确认正在检索的文件以 UTF-8 格式存储在服务器上,没有 BOM,并且 äöü
等字符已正确编码。
使用上面的代码传输文件后,文件在目标机器上仍然是 UTF-8 编码(file -bi
输出 application/xml; charset=utf-8
),但是查看文件的内容我可以看到äöü
不再可读,并已转换为 ü
.
同样的问题也发生在
的示例程序中http://www.jcraft.com/jsch/examples/Sftp.java.html
以及使用 scp 命令行时。
使用相同的 Java 代码将文件传输到我的开发机器 运行 Windows 10 保持文件完整。
无论客户端计算机使用何种操作系统,如何确保编码保持不变?
正如 VGR 在上面的评论中指出的那样,传输工作正常,只是编辑器使用错误的编码打开文件