Accents sur la Console

Messages postés
261
Date d'inscription
mardi 12 décembre 2006
Statut
Membre
Dernière intervention
10 juin 2019
- - Dernière réponse : William VOIROL
Messages postés
261
Date d'inscription
mardi 12 décembre 2006
Statut
Membre
Dernière intervention
10 juin 2019
- 14 juin 2015 à 08:31
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/101061-accents-sur-la-console

ccgousset
Messages postés
147
Date d'inscription
samedi 1 août 2009
Statut
Membre
Dernière intervention
5 novembre 2019
-
Bien vu William , en plus le discret setconsoleattribut. Si tu fais de la TI 83-82 je viens de poser un decompileur pour la TI . Y a les chaines STRX que j arrive pas a bien gerer si t ai au courant dis le moi . Voila Bravo encore apres les pi du papi l accent suisse je crois ...
William VOIROL
Messages postés
261
Date d'inscription
mardi 12 décembre 2006
Statut
Membre
Dernière intervention
10 juin 2019
> ccgousset
Messages postés
147
Date d'inscription
samedi 1 août 2009
Statut
Membre
Dernière intervention
5 novembre 2019
-
Bonjour ccgousset,

Merci le message encourageant.
Non, désolé, je ne connais pas les calculatrices TI-82 ou TI-83 et leur assembleur.

Toutes mes excuses pour cette réponse tardive, mais tout le monde sait que chez nous, il y a pas le feu au lac ...
pgl10
Messages postés
310
Date d'inscription
samedi 18 décembre 2004
Statut
Membre
Dernière intervention
6 juillet 2019
1 -
Bonjour à tous,
Il y aussi une autre solution : employer la fonction CharToOemA() prévue pour cela.
http://codes-sources.commentcamarche.net/source/53868-pour-afficher-les-caracteres-accentues-sous-windows-en-mode-console en montre l'utilisation avec des exemples.
Pouvoir choisir est un avantage.
William VOIROL
Messages postés
261
Date d'inscription
mardi 12 décembre 2006
Statut
Membre
Dernière intervention
10 juin 2019
> pgl10
Messages postés
310
Date d'inscription
samedi 18 décembre 2004
Statut
Membre
Dernière intervention
6 juillet 2019
-
Bonjour pgl10,

Merci pour votre message pertinent.

Excusez-moi de ne pas avoir trouvé votre article !
Il me semble pourtant d'avoir bien recherché tous ceux qui contiennent les mots "console" et "accent".

Conclusion: avec l'âge, je deviens nul en "recherche" !

Et mon article devient quasiment caduque.

Le programme suivant montre que CharToOem traduits les caractères non représentables par les "plus ressemblants":
#include <windows.h>
#include <stdio.h>

void main() {
  char s1[]=" !\"#$%&'()*+,-./0123456789:;<=>?"; // 34: \"
  char s2[]="@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_"; // 92: \\ 
  char s3[]="`abcdefghijklmnopqrstuvwxyz{|}~";   // 127: non représentable
  char s4[]="€ 'f"...+#^0/00S<OE Z  `'""*---~(TM)s>oe zY";       // 129,141,143,144,156: nr
  char s5[]=" ¡¢£¤¥¦§¨©ª«¬­®¯°±²³'µ¶·¸¹º»¼½¾¿";   // 174: non représentable
  char s6[]="ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß";
  char s7[]="àáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ";

  SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),7);
  char oem[256];
  CharToOem("Caractères traduits par CharToOem:",oem); printf("\n%s\n", oem);
  CharToOem(s1,oem); printf("%i: %s\n",strlen(s1),oem);
  CharToOem(s2,oem); printf("%i: %s\n",strlen(s2),oem);
  CharToOem(s3,oem); printf("%i: %s\n",strlen(s3),oem);
  CharToOem(s4,oem); printf("%i: %s\n",strlen(s4),oem);
  CharToOem(s5,oem); printf("%i: %s\n",strlen(s5),oem);
  CharToOem(s6,oem); printf("%i: %s\n",strlen(s6),oem);
  CharToOem(s7,oem); printf("%i: %s\n",strlen(s7),oem);
  getchar();

/* Output
Caractères traduits par CharToOem:
32:  !"#$%&'()*+,-./0123456789:;<=>?
32: @ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_
32: `abcdefghijklmnopqrstuvwxyz{|}~?
32: __'f".??^%S<O_Z__''""--~Ts>o_zY
32:  ¡¢£¤¥¦§¨©ª«¬­®¯°±²³'µ¶*¸¹º»¼½¾¿
32: ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß
32: àáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ
*/
}

Ce second code, présente une manière toute simple d'utiliser CharToOem().
La méthode du "caractère le plus ressemblant" est le plus souvent satisfaisante, mais peut parfois créer des surprises:
#include <windows.h>
#include <stdio.h>

void main() { //  correspond à peu près à ToOEMfix(...) de l'article
  char oem[256];
  CharToOem("On tolère un taux d'alcoolémie de 0,50/00", oem);
  printf("\n%s",oem);

  getchar();
}
(malheureusement, l'affichage de CodeS-SourceS remplace le caractère "pour mille" (ANSI 137 ou x89) par "0/00"): recorrigez donc le code ci-dessus et le texte ci-dessous.

En effet, le texte:
"On tolère un taux d'alcoolémie de 0,50/00"
est affiché:
"On tolère un taux d'alcoolémie de 0,5%"
ce qui est dix fois plus !


En mettant le tableau de traduction unsigned char cod[128] à disposition, chacun a la possibilité d'y introduire les caractères représentables dont la signification lui semble correcte.