使用 fwrite 将 UTF-16 直接写入 stdout 不符合预期

问题描述 投票:0回答:1

我正在尝试弄清楚如何直接以 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) 对我来说也没什么帮助。

c stdout fwrite utf-16
1个回答
0
投票

感谢Ry-,不幸的是,答案是使用

fputws(temp, stdout)

© www.soinside.com 2019 - 2024. All rights reserved.