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 :

Problème de récupération de chaine de caractère stocké dans un fichier


Sujet :

C#

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 8
    Points : 7
    Points
    7
    Par défaut Problème de récupération de chaine de caractère stocké dans un fichier
    Alors voila, j'essaye de faire une petite appli multilangue utilisant des fichier externe stockant les traduction pour chaque control.
    Ce fichier est structuré comme un fichier.ini avec les section etc etc

    [MaForm]
    nomControl=Définition


    pour récupéré ces données, j'utilise une méthode nommé GetPrivateProfileString :


    [DllImport("kernel32")]
    private static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, int size, string filePath);

    le problème c'est que si je met un caractère avec un accent tel le "é" de Définition, au lieu de me retourner Définition, il me renvoie Définition


    protected string GetLocalizedValue(string formName, string containerName, string controlName)
    {
    //je vous met un chemin de fichier bidon pour l'exemple
    string path = @"c\temp\config.fr.ini";
    StringBuilder temp = new StringBuilder("", 255);
    int i = 0;
    string key = "";

    if (i == 0)
    {
    key = controlName;
    i = GetPrivateProfileString(formName, key, "",temp, 255,path);

    }

    if(i != 0)
    return temp.ToString();
    else
    return null;
    }

    La première solution qui me vient à l'esprit serait de vérifier les chaine de retour et remplacer les caractère problématique mais cela ne règle pas le problème...
    Je suis bien entendu ouvert à toute suggestion et toutes aide telle qu'elle soit car ce problème commence doucement à me gonfler

    Merci d'avance

  2. #2
    Expert confirmé
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Points : 4 388
    Points
    4 388
    Par défaut
    Crée un fichier Txt avec la structure suivante :
    Nom_de_ton_controle||||||||||||||Traduction

    Ensuite tu lis ton fichier ligne à ligne avec FileStream ou StreamReader. Pour finir tu split ta chaine pour récupérer la traduction et le controle. Et de ce fait, tu n'aura pas de probleme d'encodage...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    'splitter une chaine en vb.net
    Split(MaChaine, "||||||||||||||||")
    ++
    Qui ne tente rien n'a rien !
    Ce qui ne nous tue pas nous rends plus fort !!
    Mon projet ZELDA en C++/Allegro
    http://www.tutoworld.com - Le Forum -
    Mes ressources Dotnet (cours, sources, tutos)
    --------------------------------------------
    + + =

    Ne pas oublier le Tag !

  3. #3
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Citation Envoyé par Aspic
    . Et de ce fait, tu n'aura pas de probleme d'encodage...
    Seulement s'il spécifie l'encodageà utiliser dans le constructeur du StreamReader...

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 8
    Points : 7
    Points
    7
    Par défaut
    le problème c'est qu'il faut aussi que je garde mes section et que j'utilise la methode GetPrivateProfileString...

    A priori ce n'est pa un problème d'encodage, dans mon fichier que je le mette en .ini ou.txt la chaine est parfaite avec les accent et tout, c'est en retour qu'il me fait ça...

    Il ne faut pas oublié que je n'ai pas qu'une seul forme de référencé dans ce fichier, (pour info j'en ai environ 130) et un paquet de control avec pafois le même nom d'une Form à une autre

    ps: le fichier n'a pas d'extension vu que les utilisateur ne sont pas sencé l'ouvrir...
    J'ai déjà une classe me permettant de lire un fichier .ini mais le but c'est d'utiliser la methode de la dll kernel32

  5. #5
    Expert confirmé
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Points : 4 388
    Points
    4 388
    Par défaut
    Si tu tiens vraiment à utiliser cette fonction, tu devras remplacer les caractères qui plantent par les bon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim MaChaine as String = "D%^^codage"
    Replace(MaChaine,%^^, é)
    Voila
    Qui ne tente rien n'a rien !
    Ce qui ne nous tue pas nous rends plus fort !!
    Mon projet ZELDA en C++/Allegro
    http://www.tutoworld.com - Le Forum -
    Mes ressources Dotnet (cours, sources, tutos)
    --------------------------------------------
    + + =

    Ne pas oublier le Tag !

  6. #6
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Essaye comme ceci alors:

    string s=Encoding.GetEncoding(0).GetString(temp);
    s=s.Substring(0,bufLen);
    return s.Trim();

Discussions similaires

  1. Réponses: 12
    Dernier message: 01/09/2014, 16h12
  2. Réponses: 10
    Dernier message: 07/07/2011, 13h19
  3. [Batch] Rechercher et renommer une chaine de caractère complexe dans un fichier texte
    Par mrcanardwc dans le forum Scripts/Batch
    Réponses: 11
    Dernier message: 24/06/2011, 13h02
  4. [SQL7] chaines de caractères stockées dans une colonne image
    Par fredoche dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 26/11/2004, 11h12

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