我该如何在C++中打印特殊字符"█"?

3

我想在Visual Studio (C++)中打印特殊字符█,但是我得到了"?"。

我编写的相应代码:

bool b[5][3] = { { true,true,true },{ true,false,true },{ true,false,true }, 
                 { true,false,true },{ true,true,true } };
    system("color 0A");
    for (int i = 0; i < 5; i++)
    {
        for (int j = 0; j < 3; j++)
        {
            if (b[i][j])
            {
                gotoXY(3 + j, 5 + i);
                cout << "█";
            }
        }
        cout << endl;
    }

你的编辑器将把那个字符保存为一些字节序列到源文件中。编译器将把它们包含在字符串文字中并发送到控制台。控制台是否能够正确解释这些字节呢?可能会,但使用\u转义符可以确保UTF-8表示,从源代码方面提高了帮助。你的控制台必须是UTF-8才能正常工作。 - Khouri Giordano
2个回答

3

您应该使用宽输出:

#include <iostream>

#include <stdio.h>
#include <fcntl.h>
#include <io.h>

int main()
{
    ::_setmode(::_fileno(stdout), _O_U16TEXT);
    ::std::wcout << L"█" << ::std::flush;
    return 0;
}

如果您要使用伪图形,则可以选择一些像素字体,以便在控制台中呈现符号时不会出现反锯齿和间隙。


非常感谢,通过一个小变更解决了问题。#include <fcntl.h> #include <io.h> _setmode(_fileno(stdout), _O_U16TEXT); ::std::wcout << L"█" << ::std::flush; - MH.AI.eAgLe

2

尝试使用:std::cout <<"\u2588";

█ unicode: U+2588


谢谢你的帮助。我尝试了,但是没有成功。 - MH.AI.eAgLe
只有在您的控制台输出支持它时,此方法才有效。因此,它取决于操作系统/平台。 - JHBonarius

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接