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

Eri*_*rik 4 c# ssh sftp character-encoding ssh.net

我目前正在使用 Renci.SshNet 通过 SFTP 上传文件和目录,到目前为止一切正常,除了复制包含特殊字符的文件时出现编码问题,例如德文字母 \xc3\x9f、\xc3\xa4。\xc3\xb6。\xc3\xbc 等等。

\n\n

例如,当我尝试上传名为“F\xc3\xbcnf”的目录时,该名称将被转录为“F\xc3\x83\xc2\xbcnf”。

\n\n

我需要启用或设置任何类型的编码才能正确到达我的字符串吗?

\n\n
using (var sftp = new SftpClient(host, username, password))\n{\n      sftp.Connect();\n      Stream file3 = File.OpenRead(localFileName);\n      var result = sftp.BeginUploadFile(file3, remoteFileName) as SftpUploadAsyncResult;\n}\n
Run Code Online (Sandbox Code Playgroud)\n

Mar*_*ryl 5

SSH.NET 默认使用 UTF-8 编码。

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

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

public SftpClient(ConnectionInfo connectionInfo)
Run Code Online (Sandbox Code Playgroud)

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();
    ....
}
Run Code Online (Sandbox Code Playgroud)