在 Windows 控制台中打印 utf8 wchar_t

问题描述

我在 Windows 10 中运行 CodeBlocks,即使按照 some 在 SO 上找到的指示,我也没有设法打印 cosole utf8 字符。

_setmode(_fileno(stdout),0x00020000); // _O_U16TEXT
setlocale(LC_ALL,"C.UTF-8");

wchar_t star = 0x2605;
wchar_t st = L'★';

if (printf("%lc\n",star) < 0) {
    perror("printf");
}

    if (printf("\n%lc\n",st) < 0) {
    perror("printf");
}

给出输出

printf: Invalid argument
printf: Invalid argument

控制台属性>>字体设置为Lucida Console,类似于codeblocks代码编辑器。我可以在文本编辑器中看到星星作为符号,但在控制台中看不到。我该怎么办?


编辑:

即使我把之前的代码改成:

if (wprintf(L"%lc",star) < 0) {
    perror("printf");
}

printf("\n");

    if (wprintf(L"%lc",st) < 0) {
    perror("printf");
}

我看不到两个以上的矩形而不是星星(如果我复制并尝试将它们粘贴到此处,则会以正确的方式绘制)

解决方法

在控制台中尝试了所有可用的字体后,唯一让我看到实际星星的是 SimSun-ExtB