views:

90

answers:

2

Hi, I'm trying to get a file via FTP per FtpWebrequest - the download fails when the filename contains german Umlaute like ä,ö,ü.

Code:

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 ...

When changing the file name to "filename with ae.xls" it works.

The Exception is: WebException: The remote server returned an error: (550) File unavailable (e.g., file not found, no access).

A Directory Listing via ftp works well and shows the filename:

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"
}

Output is "filename with ä.xls".

Does someone have a tip how to deal with that problem - I do not have any influence on naming that files ...

Many thanks in advance Tobi

+1  A: 

It might have something to do with encodings. Some OSes support utf-8 encoded filenames, others don't; if you send a request using utf-8 encoding, and the server interprets it as something else, it won't find the files you request. If, OTOH, you just request a directory listing, all goes well because utf-8 is backward compatible with ascii-7 (that is, valid ascii-7 is also valid utf-8). My guess is you're sending utf-8 and interpret the result as something else, or vv.

tdammers
Thanks a lot - jep it is a encoding problem - i tried to get the file list (Directory Listing) also in ASCII (StreamReader sr = new StreamReader(response.GetResponseStream(),Encoding.ASCII);) - but that did not do the trick ...
Tobias Pirzer
A: 

Fetching the Filelist in UTF7 Encoding:

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

did return the filename "Cases täglich .xls" in a way I can Downlod via Method "DownloadFile"

Tobias Pirzer