java - JSch SFTP 传输更改编码

标签 java utf-8 character-encoding sftp jsch

我使用 JSch 使用以下代码将 UTF-8 编码的 XML 文件从运行 Bitvise SSH Server 的 Windows 计算机传输到我的 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 code>),但是查看文件的内容,我可以看到 äöü 不再可读,并且已转换为像 Ñ 这样的字符序列。

同样的问题也出现在示例程序中

http://www.jcraft.com/jsch/examples/Sftp.java.html

以及使用 scp 命令行时。

使用相同的 Java 代码将文件传输到运行 Windows 10 的开发计算机,使文件保持完整。

无论客户端计算机上使用什么操作系统,如何确保编码保持不变?

最佳答案

正如 VGR 在上面的评论中指出的那样,传输工作正常,只是编辑器使用了错误的编码来打开文件

关于java - JSch SFTP 传输更改编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32970559/

相关文章:

java - 使用Fragment滑动刷新时数据没有变化

javascript - 即使 header 中包含 UTF-8 元标记,也会出现不需要的情况

java - SSLEngine 但没有委派任务

java - 关于Java语法的基本问题

java - Scala 相当于 Java 的 static block 吗? (没有伴生对象)

java - servlet 和 apache HttpClient 的 UTF-8 编码问题

python - Python 3.4 中的文本编码引起困惑 : How to Prevent "UnicodeEncodeError: ' charmap' codec can't encode"

android - 转换为 UTF-8

c# - .NET:如何判断编码是否支持我的字符串中的所有字符?

scala - akka http、字符集 header 、utf-8 问题