我一直在编写一个旨在在终端上编写非英文字符的 Linux 程序,我最近将它移植到 Windows,并且在尝试更改代码页和字体时遇到了一些问题终端,具有先前定义的符号常量 _POSIX_C_SOURCE 似乎改变了代码的行为,并使其无法正确打印非英文字符,作为参考,这是我的代码。
#include <windows.h>
#include <stdio.h>
int main()
{
SetConsoleCP(CP_UTF8)
SetConsoleOutputCP(CP_UTF8)
HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_FONT_INFOEX cfie;
ZeroMemory(&cfie, sizeof(cfie));
cfie.cbSize = sizeof(cfie);
lstrcpyW(cfie.FaceName, L"Lucida Console");
SetCurrentConsoleFontEx(hStdOut, 0, &cfie);
printf("Ћирилични текст\n");
return 0;
}
这是程序打印出来的内容,具体取决于我在编译时是否在命令行参数中定义常量。
C:\Users\User\Desktop>gcc test.c
C:\Users\User\Desktop>a.exe
Ћириличан текст
C:\Users\User\Desktop>gcc -D_POSIX_C_SOURCE=2 test.c
C:\Users\User\Desktop>a.exe
������������������ ����������