2008-11-09 17 views
2

Dans un projet XCode, si j'utilise std::cout pour écrire sur la console, la sortie est correcte. Toutefois, si j'utilise std::wcout, je n'obtiens aucune sortie. Je sais que c'est un problème épineux en C++, et j'ai essayé de trouver une solution spécifique dans le cas de XCode. Quelques choses que je trouve qu'il a été suggéré devrait fonctionner Étiez:std :: wcout à la fenêtre de console dans XCode


    std::cout.imbue(std::locale("")); 

et


    std::setlocale(LC_ALL, ""); 

Aucun de ceux-ci ont fait une différence. Avant que je me résigne à passer les deux prochaines semaines à étudier l'API des facettes juste pour pouvoir écrire sur la console, j'ai pensé que je vérifierais avec l'auditeur estimé ici.

[Mise à jour]

Je pense que la raison du problème que j'ai eu est en fait à voir avec le codage spécifique de certaines des chaînes que je suis en train d'imprimer.

Si j'envoie juste un littéral de chaîne, en utilisant le L"my string" syntax cela fonctionne! Il semble que ce soit en utilisant UTF32 - petit codage endian.

Cependant, je l'ai mélangé avec des chaînes que j'ai été passé du code Objective C++ en utilisant le codage NSUTF32BigEndianStringEncoding. C'est ce mélange d'encodages qui cause les problèmes.

Je pense que nous pouvons considérer cette question comme close. Merci d'avoir lu.

Répondre

3

std :: wcout devrait fonctionner comme std :: cout.

Les travaux suivants bien sur mon MAC:

#include <iostream> 

int main() 
{ 
    std::cout << "HI" << std::endl; 
    std::wcout << L"PLOP" << std::endl; 
} 

Peut-être (si un code aurait été agréable) est parce que vous n'êtes pas un rinçage du tampon. Rappelez-vous que std :: cout et std :: wcout sont tamponnés. Cela signifie que la sortie ne sera pas transmise à la console tant que le tampon n'est pas rempli ou que vous n'avez pas vider le tampon de manière explicite.

Vous pouvez vider le tampon avec:

std::wcout << flush(); 
// or 
std::wcout << endl; // Those also puts a '\n' on the stream. 
+0

Merci pour la réponse. Je pense avoir trouvé la raison de mes problèmes - mettre à jour ma question maintenant ... – philsquared