AllocConsole();
consoleHandle = GetStdHandle(STD_OUTPUT_HANDLE);
WriteConsoleW(consoleHandle, L"qweąęėšų\n", 9, NULL, NULL);
_wfreopen(L"CONOUT$", L"w", stdout);
wprintf(L"qweąęėšų\n");

输出是:



为什么wprintf在打印qwe后停止?在 ą 中遇到的\0 字节应终止宽字符字符串,AFAIK

最佳答案

起初我接受了 Hans Passant 的回答,但 wprintf 不打印到 UTF-8 流的根本原因是 wprintf 的行为就像它使用函数 wcrtomb,它将宽字符 (wchar_t) 编码为多字节序列,具体取决于当前语言环境 - link
Windows 没有支持 UTF-8 的语言环境(支持 UTF-8 代码页 (65001) 的语言环境)。

来自 MSDN 的引用:

10-05 22:27