我正在尝试弄清楚如何直接以 UTF-16 模式(不带
wprintf
)写入控制台,作为解决 另一个问题 的一部分,并且想首先直接在 C 中执行此操作。这是问题的一个例子:
#include <stdio.h>
#include <fcntl.h>
#include <io.h>
int main() {
_setmode(_fileno(stdout), _O_U16TEXT); // Comment out for non-Unicode output
wchar_t temp[] = { L'A', 0x2588, L'C', L'D', L'\n', 0 };
// char temp[] = { 'A', 'C', 'D', '\n', 0 };
wprintf(temp); // prints "A█CD\n" as expected
// printf(temp);
fwrite(temp, sizeof *temp, 4, stdout); // Doesn't print anything
fflush(stdout);
return 0;
}
如果您注释掉
_setmode(...)
并取消注释常规 printf
的其他部分,您会看到 fwrite
的作用与 printf
类似,并打印“ACD”
“。当您执行当前示例时 fwrite
只是不显示任何内容。为什么?
我将程序通过管道传输到一个文本文件,并且数据是在那里,但它只是不会显示到
stdout
。
我寻找过类似的问题,但谷歌没有为我提供任何信息。 Bing Copilot (ChatGPT) 对我来说也没什么帮助。
感谢Ry-,不幸的是,答案是使用
fputws(temp, stdout)
。