_tprintf cu caractere Unicode într-o aplicație de consolă (Programare, C++, Winapi, Unicode, Aplicație Consolă)

ahmd0 a intrebat.

Fac această ieșire simplă dintr-o aplicație de consolă construită cu Unicode (folosind C++ și Visual Studio 2008). Acest cod este destinat să ruleze pe Windows:

_tprintf(L"Some sample string
");

Totul funcționează bine. Dar dacă adaug un caracter non-ASCII acolo:

_tprintf(L"Some sample € string
");

ceea ce se afișează în consolă este tot ceea ce apare până la acel caracter:

Câteva exemple

Ce fac greșit aici?

Comentarii

  • Deoarece consola dvs. nu este capabilă să afișeze acel caracter. Conversia de la Unicode la pagina de cod pe 8 biți nu reușește acolo și asta trunchiază șirul. Pagina de cod implicită pentru o consolă este în mod normal 437, vechea pagină de cod IBM PC, o mașină care a fost proiectată înainte ca Europa să adopte noua sa monedă. Va trebui să comutați consola la o altă codificare care are acest caracter, SetConsoleOutputCP(). –  > Por Hans Passant.
  • Tocmai am încercat să apelez la SetConsoleOutputCP(1200); înainte de acest apel și nu s-a schimbat nimic. –  > Por ahmd0.
  • dați _setmode(_fileno(stdout), _O_WTEXT); o încercare –  > Por Cubbi.
  • @Cubbi: Ați înțeles. Vrei să îl postezi ca răspuns separat și îl voi marca ca soluție? –  > Por ahmd0.
1 răspunsuri
Cubbi

În mod implicit, consola windows nu procesează caractere largi. Probabil că cea mai simplă modalitate de a activa această funcționalitate este să apelați _setmode:

_setmode(_fileno(stdout), _O_WTEXT); 

A se vedea MSDN pentru incluziunile necesare, exemple de utilizare și alte moduri disponibile.