代码之家  ›  专栏  ›  技术社区  ›  Tobias Pirzer

ftpwebrequest-文件名包含德语“umlaute”,如_、_

  •  2
  • Tobias Pirzer  · 技术社区  · 15 年前

    我正在尝试通过ftp per 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”。

    有人知道如何处理这个问题吗?我对文件的命名没有任何影响…

    多谢,托比

    2 回复  |  直到 15 年前
        1
  •  2
  •   tdammers    15 年前

    这可能与编码有关。一些OSE支持UTF-8编码的文件名,而另一些OSE不支持;如果您使用UTF-8编码发送请求,并且服务器将其解释为其他内容,那么它将找不到您请求的文件。如果您只是请求一个目录列表,那么一切都会很顺利,因为utf-8向后兼容ascii-7(也就是说,有效的ascii-7也是有效的utf-8)。我猜你在发送UTF-8,并将结果解释为其他东西,或者vv。

        2
  •  1
  •   Tobias Pirzer    15 年前

    以utf7编码获取文件列表:

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

    是否返回了文件名“cases t_ glich.xls”,我可以通过方法“downloadfile”下载。

    推荐文章