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.
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.
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) ?
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.
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.
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 ?
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".
Qu’entendez-vous par "encodage" ?question : pk spécifier un entête si c'est l'encodage qui compte ?
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".
Partager