Bonjour,
J’ai posté récemment et manifestement je me suis mal exprimé car personne n’a compris ma question. La discussion était devenu quasi illisible et donc je décide de faire un nouveau post… J’ai essayé autant que faire se peut de simplifier le problème. En espérant que ce soit plus clair maintenant
Voici le code qui me sert de support :
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <locale.h>
#include <Windows.h>
#define TAILLE 100
void afficherChaine()
{
char chaine[TAILLE] = "\xC3\x84"; //195 et 132 en base 10
int k;
for (k = 0 ; k < strlen(chaine) ; k++)
printf("chaine[%d] : %X, %c\n", k, (unsigned char)chaine[k], chaine[k]);
printf("\n");
}
int main()
{
printf("GetConsoleOutputCP() : %d\n\n", GetConsoleOutputCP());
char* encodage = setlocale(LC_ALL, "");
if (encodage != NULL) printf("locale : %s\n", encodage);
afficherChaine();
encodage = setlocale(LC_ALL, "C");
if (encodage != NULL) printf("locale : %s\n", encodage);
afficherChaine();
encodage = setlocale(LC_ALL, "Greek_Greece.1253");
if (encodage != NULL) printf("locale : %s\n", encodage);
afficherChaine();
return 0;
}
il retourne :
GetConsoleOutputCP() : 850
locale : French_France.1252
chaine[0] : C3, Ã
chaine[1] : 84, "
locale : C
chaine[0] : C3, ├
chaine[1] : 84, ä
locale : Greek_Greece.1253
chaine[0] : C3, G
chaine[1] : 84, "
Il s’agit de tenter d’expliquer ce qu’on voit ici. Pourquoi a-t-on deux affichages différents en fonction de la locale ? Et surtout comment anticiper sur ce qu’on voit ici ? Je n’arrive pas à trouver un logique particulière à tout cela.
PRECISION TRES IMPORTANTE : " et „ sont deux caractères différents. Donc dans la table 1252 le " n’est pas le caractère 132.
Merci pour votre aide
+0
-0