2013-03-15 2 views
7

Sto facendo questo semplice output da un'applicazione console creata da Unicode (utilizzando C++ e Visual Studio 2008). Questo codice è destinato a essere eseguito su Windows:_tprintf con caratteri Unicode in un'app console

_tprintf(L"Some sample string\n"); 

Tutto funziona correttamente. Ma se posso aggiungere un carattere non ASCII in là:

_tprintf(L"Some sample € string\n"); 

che cosa ottiene in uscita per la console è tutto fino a quel personaggio:

Alcuni campione

Cosa faccio di sbagliato Qui?

+2

È perché la tua console non è in grado di visualizzare quel personaggio. La conversione da codice Unicode alla pagina di codice a 8 bit non riesce e la stringa viene troncata. La code page predefinita per una console è normalmente 437, la vecchia tabella codici PC IBM, una macchina progettata prima che l'Europa adottasse la sua nuova valuta. Dovrai passare la console a un'altra codifica che ha il carattere, SetConsoleOutputCP(). –

+0

Ho appena provato a chiamare "SetConsoleOutputCP (1200);" prima di quella chiamata e nulla è cambiato. – ahmd0

+2

dare '_setmode (_fileno (stdout), _O_WTEXT);' a prova – Cubbi

risposta

7

Per impostazione predefinita, la console di Windows non elabora i caratteri di larghezza. Probabilmente il modo più semplice per abilitare tale funzionalità è quello di chiamare _setmode:

_setmode(_fileno(stdout), _O_WTEXT); 

Vedere MSDN per la richiesta comprende, esempi di utilizzo, e altre modalità disponibili.