Только у меня работает SetConsoleOutputCP()
. Даже "Consolas" в качестве шрифта дает правильные символы.
#include <windows.h>
#include <stdio.h>
int main()
{
fprintf(stderr, "нијe\n");
SetConsoleOutputCP(CP_UTF8);
fprintf(stderr, "нијe\n");
}
Я компилирую с MinGW-W64 GCC 8.1.0 :
> gcc -Wall -Wextra -pedantic console.c -o console.exe
ОС Windows10 (1903), запустите в командной строке с помощью следующих командных строк:
> for %i in (850 1252 65001) do ( mode con cp select=%i & console.exe & mode con /status )
Он выдаст такой вывод (извините, немецкий язык):
> (mode con cp select=850 & console.exe & mode con /status )
Status von Gerät CON:
---------------------
Zeilen: 9999
Spalten: 120
Wiederholrate: 31
Verzögerungszeit:1
Codepage: 850
ð¢ð©Ðÿe
нијe
Status von Gerät CON:
---------------------
Zeilen: 9999
Spalten: 120
Wiederholrate: 31
Verzögerungszeit:1
Codepage: 850
> (mode con cp select=1252 & console.exe & mode con /status )
Status von Gerät CON:
---------------------
Zeilen: 9999
Spalten: 120
Wiederholrate: 31
Verzögerungszeit:1
Codepage: 1252
нијe
нијe
Status von Gerät CON:
---------------------
Zeilen: 9999
Spalten: 120
Wiederholrate: 31
Verzögerungszeit:1
Codepage: 1252
> (mode con cp select=65001 & console.exe & mode con /status )
Status von Gerät CON:
---------------------
Zeilen: 9999
Spalten: 120
Wiederholrate: 31
Verzögerungszeit:1
Codepage: 65001
нијe
нијe
Status von Gerät CON:
---------------------
Zeilen: 9999
Spalten: 120
Wiederholrate: 31
Verzögerungszeit:1
Codepage: 65001
Просто примечание:Используйте STD_ERROR_HANDLE
вместо STD_OUTPUT_HANDLE
, если вам нужен дескриптор stderr
.