Mon code est essentiellement ceci:C++: caractères larges générés incorrectement?
wstring japan = L"日本";
wstring message = L"Welcome! Japan is ";
message += japan;
wprintf(message.c_str());
Je souhaite utiliser des chaînes larges mais je ne sais pas comment ils sont délivrés, donc j'utilisé wprintf. Quand je lance quelque chose comme:
./widestr | hexdump
Les codepoints hexadécimaux créent ceci:
65 57 63 6c 6d 6f 21 65 4a 20 70 61 6e 61 69 20 20 73 3f 3f
e W c l m o ! e J p a n a i s ? ?
Pourquoi sont-ils tous ont sauté dans l'ordre? Je veux dire que si le wprintf est faux je ne comprends toujours pas pourquoi il sortirait dans un tel ordre brouillé spécifique!
éditer: endianness ou quelque chose? ils semblent tourner chaque deux caractères. hein.
EDIT 2: J'ai essayé d'utiliser wcout, mais il sort exactement les mêmes points de code hexidécimal. Bizarre!
Peut-être que vous devriez essayer 'cout << message << endl'. – phimuemue
@phimuemue, Cela ne fonctionne pas, il m'envoie environ 30 erreurs, d'abord étant 'widestr.cpp: 18: erreur: aucune correspondance pour 'operator <<' dans 'std :: cout << message'', y compris beaucoup sur traits de caractère ostream ou quelque chose, il ne sortira pas la chaîne large! –
Quelle plate-forme et quel compilateur utilisez-vous? – hlovdal