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

MFC Discussion :

CString et accent.


Sujet :

MFC

  1. #1
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2022
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2022
    Messages : 21
    Par défaut CString et accent.
    Bonjour,
    qqun pourrait me dire pourquoi je n'arrive pas à gérer les accents ?

    MessageBox("tête");

    ou CString tmp = "tête";
    MessageBox(tmp);

    compilation unicode ou pas c'est pareil.

    ca me renvois pas les accents !

    Merci.

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 466
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 466
    Par défaut
    Les valeurs en dur dans le code, c'est caca !
    Mettre des valeurs en dur quand on ne maîtrise pas clairement l'encodage (BOM, UTF-8, etc...) des fichiers source (et la non-utilisation de la MACRO L ou TEXT), c'est s'exposer à bien des emmerdes.
    Vos questions et remarques montrent que vous n'avez pas une grande expérience dans le domaine, on devra le faire par étape.

    On commence par la commencement : Pourquoi utiliser cette antiquité de CString qui n'est même pas compatible avec le moindre accent même ASCII étendu et pas la classe standard "std::string" (c'est pas pour ça qu'il faut s'en servir) ?

  3. #3
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2022
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2022
    Messages : 21
    Par défaut
    C’était un exemple.
    en fait je récupere des valeurs lu dans un xml via tinyxml2. je n'ai aucunes chaines littérales en dur dans le code.
    pour toutes les autres chaines je les stocks dans les ressource et je les appelle via loadstring pour afficher certains messages dans des messagebox.

    je veux bien definir des std::string et l'afficher dans un MessageBox mais ça change rien.

  4. #4
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2022
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2022
    Messages : 21
    Par défaut
    il aurait plus simple de me dire de compiler en UNICODE et de passer utf-8 en ligne de commande.
    c’était pas une évidence pour moi, j'avais arrêté de programmer il y a 20 ans.

  5. #5
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 526
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 526
    Par défaut
    Citation Envoyé par gerome88 Voir le message
    je veux bien definir des std::string et l'afficher dans un MessageBox mais ça change rien.
    non il ne faut pas utiliser des std::string mais plutôt des std::wstring.
    Par contre c'est bizarre que la classe MFC CString gère mal ça..
    le problème ne viendrait pas de TinyXML ?

  6. #6
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2022
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2022
    Messages : 21
    Par défaut
    Citation Envoyé par Mat.M Voir le message
    non il ne faut pas utiliser des std::string mais plutôt des std::wstring.
    Par contre c'est bizarre que la classe MFC CString gère mal ça..
    le problème ne viendrait pas de TinyXML ?
    Bonjour, le problème venait de moi.
    j'avais bien un xml avec en entête utf-8
    mais comme je n'y connaissais rien en xml , pour le créer je m'etais servi de bloc note.
    je ne savais pas qu'il fallait l'encoder aussi en utf-8. chose faite avec notepad ++.
    je recupere bien mes accents du coup.
    question : pk spécifier un entête si c'est l'encodage qui compte ?

  7. #7
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 466
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 466
    Par défaut
    CString est un alias vers CStringT.

    Si vous ne compilez qu'en UNICODE, autant utiliser CStringW, au moins c'est explicite.

    Et quit à utiliser du standard, autant utiliser std::wsting.

    La gestion des accents et des mauvais encodages seront plus visible avec ces types explicitement "Wide".

    question : pk spécifier un entête si c'est l'encodage qui compte ?
    Qu’entendez-vous par "encodage" ?

    Sans en-tête, aucun moyen "fiable" d'avoir l'encodage d'un fichier.
    Ce n'est que des heuristiques qui permettent de "deviner/évaluer" l'encodage d'un fichier. Donc chaque éditeur de texte peut évaluer l'encodage d'un fichier de manière différente.

    L'en-tête XML est là pour avoir un résultat cohérent si le fichier est correctement encodé (que l'en-tête est cohérent avec l'encodage, que l'encodage est le même tout le long du document, etc...).

    Si votre en-tête ne correspond pas à l'encodage ou que vous utilisez plusieurs encodages, la librairie XML ne peut pas faire de miracle.

    Comme je l'ai déjà indiqué, c'est à vous (développeur ou utilisateur final) de ne donner à votre programme que des fichiers "cohérents", ou activez le mode "paranoïa" des librairies pour qu'elles n'acceptent que des fichiers "en béton".

Discussions similaires

  1. char* => CString probleme avec les accents
    Par kacedda dans le forum MFC
    Réponses: 2
    Dernier message: 26/06/2007, 15h40
  2. identification lettre (pb accent)
    Par scorbo dans le forum C
    Réponses: 5
    Dernier message: 14/12/2002, 02h59
  3. que deviennent mes accents ?!
    Par petitdns dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 28/11/2002, 09h32
  4. [Accents - XML] Problème de codage non supporté !!
    Par Smortex dans le forum Composants VCL
    Réponses: 6
    Dernier message: 24/11/2002, 11h00
  5. Convertion de type VARIANT à type CString
    Par j_grue dans le forum MFC
    Réponses: 2
    Dernier message: 07/11/2002, 14h18

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