I ont le code pour imprimer un utf-8 char console de fenêtres:sortie utf-8 à la console
SetConsoleOutputCP(65001);
freopen(NULL, "w,ccs=UTF-8", stdout);
wchar_t u16 = 0x00A9;
unsigned char utf8_b[] = {0xc2, 0xa9, 0x0}; //same as using WideCharToMultibyte for u16
printf("%s", utf8_b); //(1)
wprintf(L"%c", u16); //(2)
(1) produit une sortie correcte qui est '©', tandis que (2) de sortie est le caractère de remplacement U + FFFD. J'ai essayé de rediriger stdout (2) vers un fichier pour voir s'il y a un problème avec la conversion d'encodage mais il produit les mêmes séquences d'octets que utf8_b []. Est-ce que quelqu'un peut m'expliquer pourquoi est-ce? Est-ce un problème de Windows?
btw, ma police de console est déjà définie sur Consolas.
edit: Je commente (1) avant d'utiliser (2), donc je pense que ce n'est pas lié à l'orientation du flux ici. J'ai lu quelque part que certains bogues d'implémentation dans la page de codes Windows 65001 peuvent affecter les E/S standard. Quelqu'un peut-il confirmer cela pour moi?
Qu'en est-il de ['putwchar'] (http://www.cplusplus.com/reference/cwchar/putwchar/)? – Kninnug
@Kninnug même résultat que (2) =. = – hatsuyuki
Cela ne me reproche pas du tout. Quelle version de VS est-ce? –