#include <stdio.h>
#include <windows.h>
int main(void)
{
SetConsoleOutputCP(65001);
printf("%s\n", "PĹ™Ăliš ĹľluĹĄouÄŤkĂ˝ kĹŻĹ"); /* UTF-8 */
printf("%S\n", L"Text"); /* UTF-16 */
return(0);
}
Pozn.: když se nastaví např. Lucida Console, tak to funguje skvěle ;)
Pozn.: ekvivalentem funkčního volání SetConsoleOutputCP(65001) je příkaz "chcp 65001"
Zkoušel jsem. Nefunguje. Navíc se nedá specifikovat font, který chci. Alespoň indexu do tabulky, kde jsou pouze rozměry fontu, neříkám výběr. To je spíše změna velikosti fontu udělaná přes obludné API. (Microsoft zde propadá, ač je to nedokumentovaná funkce.)
Nicméně díky za link.
Ve Vistách a 7mičkách lze použít:
#include <windows.h>
#include <strsafe.h>
int main(void)
{
CONSOLE_FONT_INFOEX cfie;
ZeroMemory(&cfie, sizeof(cfie));
cfie.cbSize = sizeof(cfie);
cfie.dwFontSize.Y = -20;
cfie.FontFamily = FF_DONTCARE;
cfie.FontWeight = 400;
StringCbCopyW(cfie.FaceName, sizeof(cfie.FaceName), L"Lucida Console");
SetCurrentConsoleFontEx(GetStdHandle(STD_OUTPUT_HANDLE), FALSE, &cfie);
return(0);
}
ve starších verzích buď to harakiri, co tu někdo posílal jako odkaz, nebo ho nastavit jako výchozí font na daném zástupci a spoléhat, že ho nikdo nezmění.
P.S.: zkoušel jsem podporu UTF-16 v printf() a máte pravdu, konzole Windows fakt stojí za ........ zlámanou grešli, spolehlivě funguje skutečně pouze WriteConsoleW() :/