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

C# Discussion :

Caractères accentués récupérés depuis la console


Sujet :

C#

  1. #1
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    281
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 281
    Points : 47
    Points
    47
    Par défaut Caractères accentués récupérés depuis la console
    Bonjour à tous,

    J'ai développé un petit programme en ligne de commande ( c# ) permettant d'envoyer des mail via SMTP.

    Tous les paramètres ( serveur smtp, objet,message,adresses) se passent en argument d'appel de mon programme ( avec argv[] ).

    Le soucis est que lorsque j'envoie un message avec des caractères accentués, ils sont mal retransmis.

    Je sais que cela vient du jeux de caractères employé par la console windows ( du moins je présume).

    Je pense donc qu'il faut utiliser un objet Encoding afin de "transcoder" mes arguments afin d'avoir les bon caractères.

    Je voudrais déja savoir si je suis sur la bonne voie et si c'est possible.

    Merci d'avance les amis

    Cordialement,

    Nixeus

  2. #2
    Membre confirmé Avatar de Redouane
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    435
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 435
    Points : 569
    Points
    569
    Par défaut
    Bonjour,

    oui effectivement, c'est un jeu de codage, et je pense que la bonne pratique, c'est d'utiliser l'Unicode, en effet, il est géré sur tt les machines par défaut.
    exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
       Encoding e = Encoding.Unicode;
     
                byte[] encode;
     
                encode = e.GetBytes("Test chaîne accentée");
     
                Console.WriteLine(e.GetString(encode));
     
                Console.Read();
    ce code va afficher les accents ;-)

    bonne courage.

  3. #3
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    281
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 281
    Points : 47
    Points
    47
    Par défaut
    Je suis ton raisonnement Redouane.
    Le soucis c'est que quand je lis directement mes args[], j'ai déja des ùù au lieu des èè.

    C'est trop tard pour le décodage non ?

  4. #4
    Membre expérimenté Avatar de ctxnop
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Morbihan (Bretagne)

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 858
    Points : 1 732
    Points
    1 732
    Par défaut
    Salut,
    Je ne sais pas si ca va t'aider, mais il existe un objet en .Net nommé System.Console et qui possède les propriétés InputEncoding et OutputEncoding. A mon avis tu devrais trouver de quoi résoudre ton problème en passant par la.
    Et pour répondre à ta question, non ce n'est pas trop tard pour encoder/decoder. Le tout est de savoir dans quel encodage tu reçois et dans lequel tu souhaite convertir.

  5. #5
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Peut-être comme ceci (trouvé sur le Web, dernière ligne modifiée pour l'encodage):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    // Create a new StreamReader using standard input as the stream
    System.IO.StreamReader ConsoleStreamReader =
    new System.IO.StreamReader(
    // Sets reader's input stream to the standard input stream
    new System.IO.StreamReader(
    System.Console.OpenStandardInput( ),
    System.Text.Encoding.Default).BaseStream,
    // Sets reader's encoding to whatever standard input is using
    System.Text.Encoding.GetEncoding("ISO-8859-1"));
    Remplacer ensuite Console par ConsoleStreamReader.

  6. #6
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    281
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 281
    Points : 47
    Points
    47
    Par défaut
    Bonjour,

    Merci à tous pour vos réponses !
    Malheureusement je n'ai pas réussi

    Voici ce que j'ai tenté (entre autres)

    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
     
     // Récupère les arguments passés
     Encoding e = Encoding.GetEncoding("utf-8");
     System.Console.InputEncoding=e;
     
      int nBParam = 0;
      nBParam = args.Length;
      int i = 0;
       if (nBParam > 0)
       {
          for (i = 0; i < nBParam; i++)// Parcour des arguments passés et stockage en variable
           {
     
           }
       }
    Cela en change rien, toujours pas d'accents

    Encore merci !

  7. #7
    Membre confirmé Avatar de Redouane
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    435
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 435
    Points : 569
    Points
    569
    Par défaut
    Bonj,
    ce que je sais, c'est que lorsque t'envoi un email avec un tel codage, il faut que le destinataire possède les informations nécessaires pour lire ce codage.
    Sinon, l'Unicode normalement garde son intégrité, en effet il est géré sur toutes les machines par défaut.

  8. #8
    Membre confirmé Avatar de Redouane
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    435
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 435
    Points : 569
    Points
    569

  9. #9
    Membre expérimenté Avatar de ctxnop
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Morbihan (Bretagne)

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 858
    Points : 1 732
    Points
    1 732
    Par défaut
    Je dirai a priori que c'est normal puisque tu définit l'encodage de la console après l'avoir lue. Résultat, ce que tu as lut, l'a été dans l'ancien encodage.

    Tu cherche a lire les paramètres passés à ton programme, c'est donc trop tard pour changer l'encodage. Par contre, tu peux utiliser la propriété pour connaitre l'encodage actuel de ta console, puis te servir de méthodes de conversions d'encodage pour récupérer tes accents.

    Quelque chose de ce genre donc :
    Code csharp : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Encoding e = Encoding.GetEncoding("utf-8");
    List<string> lst = new List<string>();
    foreach(string a in args)
    {
        Byte[] tmp = Console.InputEncoding.GetBytes(a);
        Byte[] converted = Encoding.Convert(Console.InputEncoding, e, tmp);
        lst.Add(e.GetString(converted));
    }

    PS : code non testé.

  10. #10
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    281
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 281
    Points : 47
    Points
    47
    Par défaut
    Bonsoir et merci à tous pour vos réponses,

    Ton code compile sans problème, mais cela ne change rien, je ne récupère toujours pas mes accents :-(

  11. #11
    Membre expérimenté Avatar de ctxnop
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Morbihan (Bretagne)

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 858
    Points : 1 732
    Points
    1 732
    Par défaut
    Je viens de faire un petit test, les arguments accentué passé en paramètre par la console sont obtenus tout a fait correctement, nul besoin de changer l'encodage.
    Du coup je me demande à quel moment tu vois que ces caractères sont mal formés.
    Est-ce dans ton programme, en mode débug ?
    Est-ce en les écrivant sur ta console ?
    Est-ce dans le mail reçut ?

    Perso dans les deux premiers cas je n'ai pas le problème.
    Je présume donc que c'est à la réception qu'ils sont mal formés.
    La encore je ne pense pas qu'ils soient réellement mal transmis, mais plutot que ce que tu utilise pour lire le mail se trompe d'encodage.
    Je ne connais pas bien le protocole SMTP mais il doit existe un moyen de spécifier l'encodage. Par exemple, en HTML, on peux indiquer au navigateur l'encodage en le spécifiant dans une balise META.
    Comme les mails sont souvent au format HTML, tu peux surement faire de même en utilisant la même technique.

    Tu peux ajouter ces entêtes à ton mail :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    MIME-Version: 1.0
    Content-Type: text/plain; charset=UTF-8
    Content-Transfer-Encoding: quoted-printable
    Remplace UTF-8 par l'encodage de ton choix, enfin, l'encodage utilisé, si tes paramètres sont en ISO-8859-15, c'est ca qu'il faut mettre.

  12. #12
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    281
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 281
    Points : 47
    Points
    47
    Par défaut
    Bonjour,

    Je te remercie de ta réponse et d'avoir éssayé de comprendre.
    Désolé également pour mon retard.

    L'étau se resserre, apparemment le problème d'accents se produits quand le programme est appelé depuis un .bat

Discussions similaires

  1. Réponses: 0
    Dernier message: 28/03/2014, 18h45
  2. [FPDF] Caractères accentués depuis MySQL
    Par jeje63 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 14/01/2010, 08h58
  3. [console Windows] Caractères accentués
    Par sekiryou dans le forum C++
    Réponses: 16
    Dernier message: 26/03/2008, 03h19
  4. [Débutant] Pb caractères accentués sous console dos
    Par remitbo dans le forum Langage
    Réponses: 5
    Dernier message: 04/01/2007, 14h34
  5. Caractères accentués en mode console
    Par Koubiacz dans le forum C++
    Réponses: 2
    Dernier message: 13/05/2005, 07h07

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