bonjour à tous,
comme plein de monde je suppose, j'ai des soucis avec les accents dans un
programme C++ écrit sous windows et exécuté dans une console (page de code
850 je suppose). J'ai cherché un peu dans <locale> mais je n'ai pas trouvé
de notion de page de code... Il y a bien les API Win32 (Char2Oem par ex)
mais j'aimerais une solution C++ "pur" si elle existe... j'avoue ne jamais
avoir utilisé les locale (je fais peu de prog console et la plupart du temps
j'écris sans les accents...)
Merci pour vos lumières !
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Dominique Vaufreydaz
Bonjour,
comme plein de monde je suppose, j'ai des soucis avec les accents dans un programme C++ écrit sous windows et exécuté dans une console (page de code 850 je suppose). J'ai cherché un peu dans <locale> mais je n'ai pas trouvé de notion de page de code... Il y a bien les API Win32 (Char2Oem par ex) mais j'aimerais une solution C++ "pur" si elle existe... j'avoue ne jamais avoir utilisé les locale (je fais peu de prog console et la plupart du temps j'écris sans les accents...)
C++ ne repondra pas ce probleme la. Il n'est pas fait pour cela. Pour repondre a ta question, as-tu essayer de compiler ton code en Unicode ? Sinon, tu n'echapperas pas a l'utilisation de la conversion.
Doms.
Bonjour,
comme plein de monde je suppose, j'ai des soucis avec les accents
dans un programme C++ écrit sous windows et exécuté dans une console
(page de code 850 je suppose). J'ai cherché un peu dans <locale> mais
je n'ai pas trouvé de notion de page de code... Il y a bien les API
Win32 (Char2Oem par ex) mais j'aimerais une solution C++ "pur" si
elle existe... j'avoue ne jamais avoir utilisé les locale (je fais
peu de prog console et la plupart du temps j'écris sans les
accents...)
C++ ne repondra pas ce probleme la. Il n'est pas fait pour cela.
Pour repondre a ta question, as-tu essayer de compiler ton code
en Unicode ? Sinon, tu n'echapperas pas a l'utilisation de la conversion.
comme plein de monde je suppose, j'ai des soucis avec les accents dans un programme C++ écrit sous windows et exécuté dans une console (page de code 850 je suppose). J'ai cherché un peu dans <locale> mais je n'ai pas trouvé de notion de page de code... Il y a bien les API Win32 (Char2Oem par ex) mais j'aimerais une solution C++ "pur" si elle existe... j'avoue ne jamais avoir utilisé les locale (je fais peu de prog console et la plupart du temps j'écris sans les accents...)
C++ ne repondra pas ce probleme la. Il n'est pas fait pour cela. Pour repondre a ta question, as-tu essayer de compiler ton code en Unicode ? Sinon, tu n'echapperas pas a l'utilisation de la conversion.
Doms.
Alexandre
C++ ne repondra pas ce probleme la. Il n'est pas fait pour cela. Pour repondre a ta question, as-tu essayer de compiler ton code en Unicode ? Sinon, tu n'echapperas pas a l'utilisation de la conversion.
merci pour ta réponse. Mon code est compilé en unicode mais ça ne change rien Dommage que les locales n'encapsulent pas cette notion (codage utilisé pour les wchar_t) Je vais laisser les accents de coté ;-) c'est + simple
C++ ne repondra pas ce probleme la. Il n'est pas fait pour cela.
Pour repondre a ta question, as-tu essayer de compiler ton code
en Unicode ? Sinon, tu n'echapperas pas a l'utilisation de la
conversion.
merci pour ta réponse. Mon code est compilé en unicode mais ça ne change
rien
Dommage que les locales n'encapsulent pas cette notion (codage utilisé pour
les wchar_t)
Je vais laisser les accents de coté ;-) c'est + simple
C++ ne repondra pas ce probleme la. Il n'est pas fait pour cela. Pour repondre a ta question, as-tu essayer de compiler ton code en Unicode ? Sinon, tu n'echapperas pas a l'utilisation de la conversion.
merci pour ta réponse. Mon code est compilé en unicode mais ça ne change rien Dommage que les locales n'encapsulent pas cette notion (codage utilisé pour les wchar_t) Je vais laisser les accents de coté ;-) c'est + simple
James Kanze
Dominique Vaufreydaz wrote:
comme plein de monde je suppose, j'ai des soucis avec les accents dans un programme C++ écrit sous windows et exécuté dans une cons ole (page de code 850 je suppose). J'ai cherché un peu dans <locale> mais je n'ai pas trouvé de notion de page de code... Il y a bien les API Win32 (Char2Oem par ex) mais j'aimerais une solution C++ "pur" si elle existe... j'avoue ne jamais avoir utilisé les locale (je fais peu de prog console et la plupart du temps j'écris sans les accents...)
C++ ne repondra pas ce probleme la. Il n'est pas fait pour cela.
Oui et non. En fait, le problème de l'encodage est complexe, et se rencontre à peu près partout. (Essaie à visualiser un fichier écrit en UTF-8 avec des fonts ISO 8859-1, sous X, par exemple.) Une des facettes des locale est bien std::codecvt, qui est conçue précisement pour transcoder entre le code externe et le code interne. En principe, tu peux travailler en interne en Unicode (UTF-16 ou UTF-32) sur wchar_t, en lisant des fichiers écrit avec n'importe quel encodage, et en les écrivant avec n'importe quel autre, au moyen des imbue() dans les flux. En principe, parce que dans la pratique, tu te heurtes à un certain nombre de problèmes :
-- les locale qu'il te faut manque, -- tu n'as aucun moyen de savoir l'encodage réel du fichier en entrée, -- tu ne sais pas l'encodage qu'il faut pour le fichier en sortie, et -- de tout façon, quand tu exploites le fichier par la suite, le programme qui l'exploite fera ce qu'il veut.
Le problème des sorties est particulièrement ardu. Quel encodage doit servir si l'utilisateur va d'abord visualiser le fichier dans un xterm, avec des fonts UTF-8, puis, s'il en est content, l'écrire sur une imprimante qui ne connaît que du ISO 8859-1.
Dans le cas des fenêtres dites de console sous Windows, des raisons historiques font qu'on se sert pas du même encodage de font par défaut que dans des fenêtres. Si on sait sortir le texte vers une telle fenêtre, on peut chercher (et peut-être trouver) un locale qui convient, et en embue std::cout. Ce qui va bien jusqu'à ce que l'utilisateur décide qu'il veur régarder en différé, rédirige std::cout vers un fichier, et régarde le fichier avec notepad, ou l'imprime. Alternativement, il existe des moyens pour changer le codepage de la fenêtre : du coup, on peut sortir dans l'encodage qu'attendent tous les autres programmes, sans surprise... sauf pour les les autres applications qu'on lance dans la fenêtre, qui se met tout à coup à afficher mal.
-- James Kanze (GABI Software) email: Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
Dominique Vaufreydaz wrote:
comme plein de monde je suppose, j'ai des soucis avec les accents
dans un programme C++ écrit sous windows et exécuté dans une cons ole
(page de code 850 je suppose). J'ai cherché un peu dans <locale> mais
je n'ai pas trouvé de notion de page de code... Il y a bien les API
Win32 (Char2Oem par ex) mais j'aimerais une solution C++ "pur" si
elle existe... j'avoue ne jamais avoir utilisé les locale (je fais
peu de prog console et la plupart du temps j'écris sans les
accents...)
C++ ne repondra pas ce probleme la. Il n'est pas fait pour cela.
Oui et non. En fait, le problème de l'encodage est complexe, et
se rencontre à peu près partout. (Essaie à visualiser un fichier
écrit en UTF-8 avec des fonts ISO 8859-1, sous X, par exemple.)
Une des facettes des locale est bien std::codecvt, qui est
conçue précisement pour transcoder entre le code externe et le
code interne. En principe, tu peux travailler en interne en
Unicode (UTF-16 ou UTF-32) sur wchar_t, en lisant des fichiers
écrit avec n'importe quel encodage, et en les écrivant avec
n'importe quel autre, au moyen des imbue() dans les flux. En
principe, parce que dans la pratique, tu te heurtes à un certain
nombre de problèmes :
-- les locale qu'il te faut manque,
-- tu n'as aucun moyen de savoir l'encodage réel du fichier en
entrée,
-- tu ne sais pas l'encodage qu'il faut pour le fichier en
sortie, et
-- de tout façon, quand tu exploites le fichier par la suite,
le programme qui l'exploite fera ce qu'il veut.
Le problème des sorties est particulièrement ardu. Quel encodage
doit servir si l'utilisateur va d'abord visualiser le fichier
dans un xterm, avec des fonts UTF-8, puis, s'il en est content,
l'écrire sur une imprimante qui ne connaît que du ISO 8859-1.
Dans le cas des fenêtres dites de console sous Windows, des
raisons historiques font qu'on se sert pas du même encodage de
font par défaut que dans des fenêtres. Si on sait sortir le
texte vers une telle fenêtre, on peut chercher (et peut-être
trouver) un locale qui convient, et en embue std::cout. Ce qui
va bien jusqu'à ce que l'utilisateur décide qu'il veur régarder
en différé, rédirige std::cout vers un fichier, et régarde le
fichier avec notepad, ou l'imprime. Alternativement, il existe
des moyens pour changer le codepage de la fenêtre : du coup, on
peut sortir dans l'encodage qu'attendent tous les autres
programmes, sans surprise... sauf pour les les autres
applications qu'on lance dans la fenêtre, qui se met tout à coup
à afficher mal.
--
James Kanze (GABI Software) email:james.kanze@gmail.com
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
comme plein de monde je suppose, j'ai des soucis avec les accents dans un programme C++ écrit sous windows et exécuté dans une cons ole (page de code 850 je suppose). J'ai cherché un peu dans <locale> mais je n'ai pas trouvé de notion de page de code... Il y a bien les API Win32 (Char2Oem par ex) mais j'aimerais une solution C++ "pur" si elle existe... j'avoue ne jamais avoir utilisé les locale (je fais peu de prog console et la plupart du temps j'écris sans les accents...)
C++ ne repondra pas ce probleme la. Il n'est pas fait pour cela.
Oui et non. En fait, le problème de l'encodage est complexe, et se rencontre à peu près partout. (Essaie à visualiser un fichier écrit en UTF-8 avec des fonts ISO 8859-1, sous X, par exemple.) Une des facettes des locale est bien std::codecvt, qui est conçue précisement pour transcoder entre le code externe et le code interne. En principe, tu peux travailler en interne en Unicode (UTF-16 ou UTF-32) sur wchar_t, en lisant des fichiers écrit avec n'importe quel encodage, et en les écrivant avec n'importe quel autre, au moyen des imbue() dans les flux. En principe, parce que dans la pratique, tu te heurtes à un certain nombre de problèmes :
-- les locale qu'il te faut manque, -- tu n'as aucun moyen de savoir l'encodage réel du fichier en entrée, -- tu ne sais pas l'encodage qu'il faut pour le fichier en sortie, et -- de tout façon, quand tu exploites le fichier par la suite, le programme qui l'exploite fera ce qu'il veut.
Le problème des sorties est particulièrement ardu. Quel encodage doit servir si l'utilisateur va d'abord visualiser le fichier dans un xterm, avec des fonts UTF-8, puis, s'il en est content, l'écrire sur une imprimante qui ne connaît que du ISO 8859-1.
Dans le cas des fenêtres dites de console sous Windows, des raisons historiques font qu'on se sert pas du même encodage de font par défaut que dans des fenêtres. Si on sait sortir le texte vers une telle fenêtre, on peut chercher (et peut-être trouver) un locale qui convient, et en embue std::cout. Ce qui va bien jusqu'à ce que l'utilisateur décide qu'il veur régarder en différé, rédirige std::cout vers un fichier, et régarde le fichier avec notepad, ou l'imprime. Alternativement, il existe des moyens pour changer le codepage de la fenêtre : du coup, on peut sortir dans l'encodage qu'attendent tous les autres programmes, sans surprise... sauf pour les les autres applications qu'on lance dans la fenêtre, qui se met tout à coup à afficher mal.
-- James Kanze (GABI Software) email: Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
Loïc Joly
bonjour à tous, comme plein de monde je suppose, j'ai des soucis avec les accents dans un programme C++ écrit sous windows et exécuté dans une console (page de code 850 je suppose). J'ai cherché un peu dans <locale> mais je n'ai pas trouvé de notion de page de code... Il y a bien les API Win32 (Char2Oem par ex) mais j'aimerais une solution C++ "pur" si elle existe... j'avoue ne jamais avoir utilisé les locale (je fais peu de prog console et la plupart du temps j'écris sans les accents...)
J'avais à un moment utilisé http://www.developpez.net/forums/showthread.php?t262&highlight=console pour avoir des accents. Ca ne marche probablement pas dans les cas tordus qu'a cité James, mais ça permet de ne pas trop choquer l'esthètisme quand on fait un petit programme de test en français.
-- Loïc
bonjour à tous,
comme plein de monde je suppose, j'ai des soucis avec les accents dans un
programme C++ écrit sous windows et exécuté dans une console (page de code
850 je suppose). J'ai cherché un peu dans <locale> mais je n'ai pas trouvé
de notion de page de code... Il y a bien les API Win32 (Char2Oem par ex)
mais j'aimerais une solution C++ "pur" si elle existe... j'avoue ne jamais
avoir utilisé les locale (je fais peu de prog console et la plupart du temps
j'écris sans les accents...)
J'avais à un moment utilisé
http://www.developpez.net/forums/showthread.php?t262&highlight=console
pour avoir des accents. Ca ne marche probablement pas dans les cas
tordus qu'a cité James, mais ça permet de ne pas trop choquer
l'esthètisme quand on fait un petit programme de test en français.
bonjour à tous, comme plein de monde je suppose, j'ai des soucis avec les accents dans un programme C++ écrit sous windows et exécuté dans une console (page de code 850 je suppose). J'ai cherché un peu dans <locale> mais je n'ai pas trouvé de notion de page de code... Il y a bien les API Win32 (Char2Oem par ex) mais j'aimerais une solution C++ "pur" si elle existe... j'avoue ne jamais avoir utilisé les locale (je fais peu de prog console et la plupart du temps j'écris sans les accents...)
J'avais à un moment utilisé http://www.developpez.net/forums/showthread.php?t262&highlight=console pour avoir des accents. Ca ne marche probablement pas dans les cas tordus qu'a cité James, mais ça permet de ne pas trop choquer l'esthètisme quand on fait un petit programme de test en français.