2010-03-22 7 views
47

Esempio:Come posso stampare i valori di wchar_t in 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; 
} 

Questo codice stampa solo HEX-valori come indirizzo. Come stampare la stringa wchar_t?

+0

La ver La prima domanda correlata è http://stackoverflow.com/questions/1625531/c-wchar-to-stdcout-and-comparision –

+0

Su quale sistema operativo e con quale app di console? Alcune console non supportano Unicode. –

+0

Windows 7. Compilatore MSVS2008 – zed91

risposta

53

Modifica: non funziona se si sta tentando di scrivere testo che non può essere rappresentato nelle impostazioni locali predefinite. :-(

Uso std::wcout invece di std::cout.

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

Stampa solo stringhe inglesi. E il russo? – zed91

+8

La console non sarà abilitata per Unicode. Il reindirizzamento dell'output è l'hangup, che è bloccato nell'affidabilità di char a 8 bit. Può solo emettere il testo corretto su una macchina russa con il font della console corretto caricato. –

+0

Si noti che se si prova a stampare su una console Linux è probabile che si finirà con caratteri confusi poiché la maggior parte dei sistemi Linux non usa la codifica utf16. –

9

Posso suggerire std::wcout?

Quindi, qualcosa di simile:

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

si potrebbe trovare ulteriori informazioni in una questione connessa here.

+0

Controlla se funziona con la lingua russa (copypaste it). Per me no. –

+0

Vedere questo thread sulla miscelazione di 'cout' e' wcout'. https://stackoverflow.com/questions/8947949/mixing-cout-and-wcout-in-same-program –

0

Si potrebbe utilizzare l'uso di un normale array di caratteri che è in realtà piena di caratteri UTF-8. Ciò dovrebbe consentire la miscelazione caratteri tra le varie lingue.

-3

non siamo alla ricerca di modi semplici!

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

Puoi spiegare altro? –

+2

Se questo ha funzionato, non ci sarebbe alcuna ragione per i caratteri larghi ... – opetroch

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

Si potrebbe migliorare questa risposta fornendo una spiegazione per andare con il vostro codice. –

+0

Benvenuti in Stack Overflow! Sebbene questo codice possa aiutare a risolvere il problema, non spiega _why_ e/o _how_ che risponde alla domanda. Fornire questo contesto aggiuntivo migliorerebbe significativamente il suo valore a lungo termine. Si prega di [modificare] la risposta per aggiungere una spiegazione, compresi quali limitazioni e ipotesi si applicano. –

Problemi correlati