【问题标题】:Renci SSH.NET: character encoding when uploading filesRenci SSH.NET:上传文件时的字符编码
【发布时间】:2026-01-17 02:15:01
【问题描述】:

我目前正在使用 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;
}

【问题讨论】:

    标签: c# ssh character-encoding sftp ssh.net


    【解决方案1】:

    SSH.NET 默认为 UTF-8 编码。

    您的 SFTP 服务器可能使用不同的编码(可能是 ISO-8859-1)。

    要使 SSH.NET 使用非 UTF-8 编码,请使用采用 ConnectionInfoSftpClient 构造函数的重载:

    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();
        ....
    }
    

    【讨论】: