Nigdy nie testowałem tej możliwości. W wielu przypadkach używam WriteConsoleW.
Właśnie sprawdziłem pod VS2019. Zapis i kompilacja pliku w CP852 działa prawidłowo. Ale przy otwarciu pliku IDE zakłada z automatu CP1250, trzeba ręcznie wybierać kodowanie (i pamiętać o tym za każdym razem...)
setlocale(LC_CTYPE, ".852")
przyda się by funkcje z biblioteki standardowej prawidłowo rozpoznawały znaki (to NIE wpływa na wyjście, a na działanie rzeczy jak isalpha()
).
Jest też taki sposób:
_setmode(_fileno(stdout), _O_U16TEXT); // albo _O_U8TEXT
wcout << L"żółć" << endl;
wprintf(L"żółć\n");
Nie trzeba się męczyć z WriteConsoleW. Ale to totalnie psuje zwykłego cout
a i printf
a, więc trzeba uważać (_O_TEXT
żeby odkręcić).
No i stdin osobno.
Tak czy inaczej, jakikolwiek sposób z Unicode'em wymaga by w konsoli była wybrana czcionka unikodowa (np. Lucida Console). Jeśli jest wybrana "czcionka rastrowa", to zadziała tylko sposób z CP852.
Więcej informacji:
http://archives.miloush.net/michkap/archive/2008/03/18/8306597.html
Użytkownik może mieć ustawioną inną stronę np. po użyciu chcp.
To już użytkownika problem. Nie przejmowałbym się tym przypadkiem.