Renci SSH.NET:上传文件时的字符编码

4
我目前正在使用Renci.SshNet通过SFTP上传文件和目录,到目前为止一切都很顺利,但是当拷贝包含特殊字符的文件时(如德语字母ß、ä、ö、ü等)存在编码问题。例如,当我尝试上传名为"Fünf"的目录时,名称会被转换为"Fünf"。是否需要启用或设置某种编码方式,以便我的字符串可以正确到达?
using (var sftp = new SftpClient(host, username, password))
{
      sftp.Connect();
      Stream file3 = File.OpenRead(localFileName);
      var result = sftp.BeginUploadFile(file3, remoteFileName) as SftpUploadAsyncResult;
}
1个回答

5
SSH.NET默认使用UTF-8编码。
您的SFTP服务器可能使用不同的编码(例如ISO-8859-1)。
要使SSH.NET使用非UTF-8编码,请使用带有ConnectionInfo参数的SftpClient构造函数的重载。
public SftpClient(ConnectionInfo connectionInfo)

并根据需要设置 ConnectionInfo.Encoding


你最终使用的示例代码:

var meth = new PasswordAuthenticationMethod(username, password);
ConnectionInfo myConnectionInfo = new ConnectionInfo(host, 22, username, meth); 
myConnectionInfo.Encoding = System.Text.Encoding.GetEncoding("ISO-8859-1");

using (var sftp = new SftpClient(myConnectionInfo))
{ 
    sftp.Connect();
    ....
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接