2010-03-22 26 views
47

Exemple:Comment puis-je imprimer les valeurs wchar_t sur la console?

#include <iostream> 

using namespace std; 

int main() 
{ 
    wchar_t en[] = L"Hello"; 
    wchar_t ru[] = L"Привет"; //Russian language 
    cout << ru 
     << endl 
     << en; 
    return 0; 
} 

Ce code imprime uniquement les valeurs HEX-comme adresse. Comment imprimer la chaîne wchar_t?

+0

Le ver y première question connexe est http://stackoverflow.com/questions/1625531/c-wchar-to-stdcout-and-comparision –

+0

Sur quel système d'exploitation, et en utilisant quelle application de la console? Certaines consoles ne prennent pas en charge Unicode. –

+0

Windows 7. Compilateur MSVS2008 – zed91

Répondre

53

Éditer: Cela ne fonctionne pas si vous essayez d'écrire du texte qui ne peut pas être représenté dans vos paramètres régionaux par défaut. :-(

Utilisation std::wcout au lieu de std::cout.

wcout << ru << endl << en; 
+3

Il imprime uniquement la chaîne anglaise. Qu'en est-il du russe? – zed91

+8

La console ne sera pas activée Unicode. La redirection de sortie est le blocage, qui est coincé dans l'héritage de char 8 bits. Il peut seulement produire le texte correct sur une machine russe avec la police de console correcte chargée. –

+0

Notez que si vous essayez d'imprimer sur une console Linux, vous risquez de vous retrouver avec des caractères tronqués, car la plupart des systèmes Linux n'utilisent pas l'encodage utf16. –

9

Puis-je suggérer std::wcout?

Donc, quelque chose comme ceci:

std::cout << "ASCII and ANSI" << std::endl; 
std::wcout << L"INSERT MULTIBYTE WCHAR* HERE" << std::endl; 

Vous pourriez trouver plus d'informations dans une question connexe here.

+0

Vérifiez si cela fonctionne avec la langue russe (copypaste il). Pour moi, ça ne l'est pas. –

+0

Voir ce sujet sur le mélange des faiblesses 'cout' et' wcout'. https://stackoverflow.com/questions/8947949/mixing-cout-and-wcout-in-same-program –

0

Vous pouvez utiliser utiliser un tableau normal char qui est en réalité rempli de caractères UTF-8. Cela devrait permettre des caractères de mélange entre les langues.

-3

nous ne cherchons pas des moyens faciles!

int i = 0; 
while (ru[i]) { 
    std::cout << (char)ru[i]; 
    i++; 
} 
+1

Pouvez-vous expliquer plus que cela? –

+2

Si cela fonctionnait, il n'y aurait aucune raison pour les caractères larges ... – opetroch

0
#include <iostream> 
using namespace std; 
void main() 
{ 
setlocale(LC_ALL, "Russian"); 
cout << "\tДОБРО ПОЖАЛОВАТЬ В КИНО!\n"; 
} 
+0

Vous pourriez améliorer cette réponse en fournissant une explication pour aller avec votre code. –

+0

Bienvenue dans Stack Overflow! Bien que ce code puisse aider à résoudre le problème, il n'explique pas pourquoi et/ou comment il répond à la question. Fournir ce contexte supplémentaire améliorerait considérablement sa valeur à long terme. S'il vous plaît [modifier] votre réponse pour ajouter une explication, y compris les limitations et les hypothèses qui s'appliquent. –