2010-07-30 11 views
2

J'essaie d'obtenir un fichier via FTP par FtpWebrequest - le téléchargement échoue lorsque le nom de fichier contient Umlaute allemand comme ä, ö, ü.FtpWebrequest - le nom de fichier contient allemand "Umlaute" comme ä, ö

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

Lorsque vous modifiez le nom du fichier "nom de fichier avec ae.xls" cela fonctionne. L'exception est: WebException: Le serveur distant a renvoyé une erreur: (550) Fichier indisponible (par exemple, fichier introuvable, pas d'accès).

Listing via un répertoire ftp fonctionne bien et montre le nom du fichier:

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

sortie est "nom de fichier avec ä.xls".

Est-ce que quelqu'un a une astuce comment faire face à ce problème - je n'ai aucune influence sur la dénomination que les fichiers ...

Un grand merci à l'avance Tobi

Répondre

2

Il pourrait avoir quelque chose à voir avec encodages . Certains systèmes d'exploitation prennent en charge les noms de fichiers codés en utf-8, d'autres non. Si vous envoyez une requête à l'aide de l'encodage utf-8, et que le serveur l'interprète comme autre chose, il ne trouvera pas les fichiers demandés. Si, OTOH, vous demandez simplement une liste de répertoire, tout va bien parce que utf-8 est rétrocompatible avec ascii-7 (c'est-à-dire, ascii-7 valide est également valide utf-8). Ma conjecture est que vous envoyez utf-8 et interprétez le résultat comme quelque chose d'autre, ou vv.

+0

Merci beaucoup - Jep il est un problème d'encodage - j'ai essayé d'obtenir la liste des fichiers (Directory Listing) également en ASCII (StreamReader sr = new StreamReader (réponse.GetResponseStream(), Encoding.ASCII);) - mais cela n'a pas fait l'affaire ... –

1

Récupérer la liste de fichiers en UTF7 Encoding:

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

n'a retourné le nom du fichier "Cas täglich .xls" d'une manière que je peux downlod via la méthode "DownloadFile"