FtpWebrequest - имя файла содержит немецкий "Umlaute", такой как ä, ö - PullRequest
2 голосов
/ 30 июля 2010

Я пытаюсь получить файл через 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».

У кого-нибудь есть совет, как справиться с этой проблемой - я не имею никакого влияния на присвоение имен этим файлам ...

Большое спасибо заранее Тоби

Ответы [ 2 ]

2 голосов
/ 30 июля 2010

Возможно, это связано с кодировками.Некоторые ОС поддерживают имена файлов в кодировке utf-8, другие - нет;если вы отправляете запрос с использованием кодировки utf-8, а сервер интерпретирует его как что-то еще, он не найдет запрашиваемые вами файлы.Если, OTOH, вы просто запрашиваете список каталогов, все идет хорошо, потому что utf-8 обратно совместим с ascii-7 (то есть действительный ascii-7 также действителен utf-8).Я предполагаю, что вы отправляете utf-8 и интерпретируете результат как что-то еще, или vv.

1 голос
/ 30 июля 2010

Получение списка файлов в кодировке UTF7:

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

вернул имя файла «Cases täglich .xls» таким способом, который я могу загрузить через метод «DownloadFile»

...