IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

download avec caractères spéciaux!


Sujet :

Windows Forms

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 537
    Points : 369
    Points
    369
    Par défaut download avec caractères spéciaux!
    Bonjour à tous!
    J'ai un petit problème de download avec les caractères spéciaux (accents,& etc...)

    je déclare un objet de type webclient et j'utilise la méthode DownLoadFile()
    Mais lorsque le fichier contient un caractère spécial il me renvoi l'erreur 404 du fichier introuvable.

    Quelqu'un aurait il une explication ???

    Merci!

  2. #2
    Expert éminent sénior

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Points : 12 465
    Points
    12 465
    Par défaut
    salut,

    est-ce que tu as essayé d'encoder tes caractères spéciaux ?

    Genre, un coup de HTMLEncode, ou un coup de renommage des & en & ?

    Mon Blog

    The Cake is still a lie !!!



    Vous voulez contribuer à la rubrique .NET ? Contactez-moi par MP.
    Vous voulez rédiger des articles pour la rubrique .NET ? Voici la procédure à suivre.

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Ce qui pose problème, c'est les caractères spéciaux dans le nom du fichier, je suppose ? (pas dans son contenu)
    Dans ce cas il faut utiliser la méthode UrlEncode (et non HtmlEncode) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    using System.Web; // il faut aussi référencer System.Web.dll
    ...
    string encodedUrl = HttpUtility.UrlEncode(url);
    WebClient wc = new WebClient();
    wc.DownloadFile(encodedUrl, localFilename);

  4. #4
    Expert éminent sénior

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Points : 12 465
    Points
    12 465
    Par défaut
    Citation Envoyé par tomlev Voir le message
    il faut utiliser la méthode UrlEncode (et non HtmlEncode)



    Mon Blog

    The Cake is still a lie !!!



    Vous voulez contribuer à la rubrique .NET ? Contactez-moi par MP.
    Vous voulez rédiger des articles pour la rubrique .NET ? Voici la procédure à suivre.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 537
    Points : 369
    Points
    369
    Par défaut
    Merci pour les réponses!

    Tomlev j'ai testé ta solution néanmoins j'ai une erreur qui intervient :

    "Le chemin d'accès spécifié, le nom de fichier ou les deux sont trop longs. Le nom de fichier qualifié complet doit comprendre moins de*260*caractères et le nom du répertoire moins de 248*caractères."

    Pourtant mon 'encodeUrl' et mon localFileName contiennent moins de 200 caractères!

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par NejNej Voir le message
    "Le chemin d'accès spécifié, le nom de fichier ou les deux sont trop longs. Le nom de fichier qualifié complet doit comprendre moins de*260*caractères et le nom du répertoire moins de 248*caractères."

    Pourtant mon 'encodeUrl' et mon localFileName contiennent moins de 200 caractères!

    Tu peux montrer le contenu de ces 2 variables, ou c'est top-secret-défense-confidentiel ?

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 537
    Points : 369
    Points
    369
    Par défaut
    Bon, j'ai en réalité appliqué la méthode urlEncode seulement sur le nom du fichier et non sur l'ensemble de l'url,plus de problème de longueure, mais le souci c'est que maintenant ça me renvoi l'erreur 404 sur plus de de caractères qu'au départ, dés qu'il y a un espace déjà me semble t'il.

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    fais voir le contenu de encodedUrl

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 537
    Points : 369
    Points
    369
    Par défaut
    Par exemple j'ai "ARTS+MARTIAUX.jpg" dans encodeURL

    et sur le serveur le fichier se nomme :

    "ARTS MARTIAUX.jpg"

  10. #10
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    bizarre, pour moi UrlEncode aurait du remplacer l'espace par "%20", pas par +... à la limite, remplace les espaces par "%20" avant de passer l'url dans UrlEncode

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 537
    Points : 369
    Points
    369
    Par défaut
    J'ai remplacé les espaces par "%20" au final j'obtiens bien:

    "ARTS%20MARTIAUX.jpg" mais l'erreur 404 est toujours présente!

  12. #12
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Euh... là je commence à manquer d'idées

    C'est un serveur Windows ou Linux ? Si c'est Linux, tu es sûr des majuscules/minuscules ?

    Tu arrives à accéder au fichier dans un navigateur ? avec quelle URL ?

  13. #13
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 55
    Points : 44
    Points
    44
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Ce qui pose problème, c'est les caractères spéciaux dans le nom du fichier, je suppose ? (pas dans son contenu)
    Dans ce cas il faut utiliser la méthode UrlEncode (et non HtmlEncode) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    using System.Web; // il faut aussi référencer System.Web.dll
    ...
    string encodedUrl = HttpUtility.UrlEncode(url);
    WebClient wc = new WebClient();
    wc.DownloadFile(encodedUrl, localFilename);
    Salut,
    Désolé de m'initier comme ça mais ta remarque m'interpelle; J'arrive à transférer mes fichiers avec downloadFile mais quand je les récupère et que je veux traiter leurs contenus, tout est écrit sur une seule ligne! Alors que si je les transfère par FileZilla c'est ok.
    ... et tous les fichiers contiennent après l'extension .txt un cara ";" ...
    D'ou ma question : est-ce qu'un cara spécial dans le nom du fichier à transférer peut tout faire foirer?

    Si oui, connais-tu la solution ?

    Bonne soirée !

  14. #14
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par stever50 Voir le message
    Salut,
    Désolé de m'initier comme ça mais ta remarque m'interpelle; J'arrive à transférer mes fichiers avec downloadFile mais quand je les récupère et que je veux traiter leurs contenus, tout est écrit sur une seule ligne! Alors que si je les transfère par FileZilla c'est ok.
    ... et tous les fichiers contiennent après l'extension .txt un cara ";" ...
    D'ou ma question : est-ce qu'un cara spécial dans le nom du fichier à transférer peut tout faire foirer?
    Attention de pas tout mélanger... toi tu transfères des données à partir d'un serveur FTP, pas HTTP (enfin je suppose, puisque tu utilises FileZilla). Je sais pas si les règles sur les noms de fichier sont les mêmes qu'en HTTP.

    Pour le problème de "tout sur la même ligne" : essaie d'ouvrir le fichier avec WordPad ou quelque chose comme ça, tu verras qu'il y a bien plusieurs lignes ; c'est juste le bloc-note qui ne sait pas les afficher. C'est parce que la séquence de retour à la ligne est différente sous UNIX (\n) et Windows (\r\n). Normalement, quand tu transfères en FTP un fichier texte, tu passes en mode de transfert ASCII, qui gère la conversion des fins de ligne. Mais WebClient.DownloadFile ne permet pas de spécifier le mode de transfert, et par défaut je pense que c'est le mode binaire qui est utilisé. Le fichier est donc transféré tel quel, sans conversion des fins de ligne, d'où le résultat que tu obtiens... Essaie d'utiliser FtpWebRequest à la place de WebClient

  15. #15
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 55
    Points : 44
    Points
    44
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Attention de pas tout mélanger... toi tu transfères des données à partir d'un serveur FTP, pas HTTP (enfin je suppose, puisque tu utilises FileZilla). Je sais pas si les règles sur les noms de fichier sont les mêmes qu'en HTTP.

    Pour le problème de "tout sur la même ligne" : essaie d'ouvrir le fichier avec WordPad ou quelque chose comme ça, tu verras qu'il y a bien plusieurs lignes ; c'est juste le bloc-note qui ne sait pas les afficher. C'est parce que la séquence de retour à la ligne est différente sous UNIX (\n) et Windows (\r\n). Normalement, quand tu transfères en FTP un fichier texte, tu passes en mode de transfert ASCII, qui gère la conversion des fins de ligne. Mais WebClient.DownloadFile ne permet pas de spécifier le mode de transfert, et par défaut je pense que c'est le mode binaire qui est utilisé. Le fichier est donc transféré tel quel, sans conversion des fins de ligne, d'où le résultat que tu obtiens... Essaie d'utiliser FtpWebRequest à la place de WebClient
    Merci de ta réponse!
    Que j'ouvre mon fichier avec WordPad ou Notepad ne change rien [bizarre que FileZilla face correctement son boulot mais pas WebClient].

    J'utilise FtpWebRequest pour lister les fichiers [ListDirectory] dans le répertoire sur le server distant et je les traite un à un dans une boucle [en parcourant le stream].
    Mais je vais tester le téléchargement avec FtpWebRequest et je te redis.

  16. #16
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par stever50 Voir le message
    Que j'ouvre mon fichier avec WordPad ou Notepad ne change rien [bizarre que FileZilla face correctement son boulot mais pas WebClient].
    Ben je sais pas, tu dois mal t'y prendre... je viens de tester, chez moi ça marche très bien

  17. #17
    Membre régulier Avatar de Roach-
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2004
    Messages : 135
    Points : 108
    Points
    108
    Par défaut
    tester ici ausi et ca fonctionne
    Roach aka Jean-François Dufour

  18. #18
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 55
    Points : 44
    Points
    44
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Ben je sais pas, tu dois mal t'y prendre... je viens de tester, chez moi ça marche très bien
    Sî t'as deux secondes pour controler mon code...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    public int Go(string srcTRIM, string destTRIM)
    {
         string fileName = null;
         string username = "username";
         string pwd = "pwd";
         FtpWebRequest ftp = (FtpWebRequest)FtpWebRequest.Create(srcTRIM);
         ftp.Method = WebRequestMethods.Ftp.ListDirectory;
         ftp.Credentials = new NetworkCredential(username, pwd);
         ftp.UseBinary = true;
     
         FtpWebResponse wr = (FtpWebResponse)ftp.GetResponse();
     
         System.IO.Stream stream = wr.GetResponseStream();
         StreamReader sr = new StreamReader(stream);
         WebClient wc = new WebClient();
         wc.Credentials = new NetworkCredential(username, pwd);
     
         int nbFiles = 0;
         while ((fileName = sr.ReadLine()) != null)
         {
              if (fileName.Substring(fileName.Length - 4, 4) == ".TXT")
              {
    	        Uri adress = new Uri(srcTRIM + fileName);
            	        wc.DownloadFile(adress, destTRIM + fileName);
    	        nbFiles++;
               }
             }
             return nbFiles;
      }

  19. #19
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par stever50 Voir le message
    Sî t'as deux secondes pour controler mon code...
    Ben je vois pas d'erreur évidente en tous cas... je sais pas trop pourquoi ça déconne. Tu es vraiment sûr que c'est pas une question de caractères de fin de ligne ? Est-ce que la taille du fichier téléchargé correspond à la taille sur le serveur ?

  20. #20
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 55
    Points : 44
    Points
    44
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Est-ce que la taille du fichier téléchargé correspond à la taille sur le serveur ?
    La taille est différente tu as vu juste. Un fichier présent sur le server OpenVMS pesant 173KB n'en fait plus que 167 après téléchargement.

Discussions similaires

  1. [DOM] Erreur parser fichier xml avec caractère spéciaux
    Par turcotm dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 19/06/2006, 09h01
  2. [MySQL] Problèmes avec caractères spéciaux
    Par brokengillou dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 27/04/2006, 17h02
  3. recupérer GET avec caractères spéciaux
    Par masseur dans le forum Langage
    Réponses: 11
    Dernier message: 03/01/2006, 11h37
  4. [RegEx] chaîne de caractères avec caractères spéciaux
    Par Kerod dans le forum Langage
    Réponses: 9
    Dernier message: 25/12/2005, 01h40
  5. Réponses: 3
    Dernier message: 11/10/2004, 17h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo