FtpWebrequest - 文件名包含德语“Umlaute”,如ä,ö

时间:2010-07-30 08:37:51

标签: c# ftpwebrequest

我试图通过FTP获取每个FtpWebrequest的文件 - 当文件名包含ä,ö,ü等德语Umlaute时,下载失败。

代码:

FtpWebRequest request2 = (FtpWebRequest)WebRequest.Create("ftp://re-web-03.servername.de/" + "filename with ä.xls");
request2.Method = WebRequestMethods.Ftp.DownloadFile;
request2.Credentials = new NetworkCredential("xxx", "xxx");
using (FtpWebResponse response = (FtpWebResponse)request2.GetResponse()) { // <-- Exception: The remote server returned an error: (550) File unavailable ...

将文件名更改为“带有ae.xls的文件名”时,它可以正常工作。

例外情况是: WebException:远程服务器返回错误:(550)文件不可用(例如,找不到文件,没有访问权限。)

通过ftp的目录列表运行良好并显示文件名:

FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://re-web-03.servername.de/");
request.Method = WebRequestMethods.Ftp.ListDirectory;
request.Credentials = new NetworkCredential("xxx", "xxx");
using (FtpWebResponse response = (FtpWebResponse)request.GetResponse())
{
    StreamReader sr = new StreamReader(response.GetResponseStream());
    while (!sr.EndOfStream)
    {   Console.WriteLine(sr.ReadLine()); } // --> output is "filename with ä.xls"
}

输出为“带ä.xls的文件名”。

是否有人提示如何处理该问题 - 我对命名该文件没有任何影响......

非常感谢Tobi

2 个答案:

答案 0 :(得分:2)

它可能与编码有关。有些操作系统支持utf-8编码的文件名,有些则不支持;如果您使用utf-8编码发送请求,并且服务器将其解释为其他内容,则它将找不到您请求的文件。如果,OTOH,你只需要一个目录列表,一切顺利,因为utf-8向后兼容ascii-7(也就是说,有效的ascii-7也是有效的utf-8)。我的猜测是你发送utf-8并将结果解释为其他内容,或者vv。

答案 1 :(得分:1)

以UTF7编码获取文件列表:

StreamReader sr = new StreamReader(response.GetResponseStream(),Encoding.UTF7);

确实以我可以通过方法“DownloadFile”下载的方式返回文件名“Casestäglich.xls”