Консоль Windows поддерживает UTF-16LE UNICODE.
Вы можете использовать некоторую библиотеку для управления коробками, например, PDCurses .
В противном случае вы можете использовать следующий подход
#include <windows.h>
#include <cwchar>
class output_swap {
output_swap(const output_swap&) = delete;
output_swap operator=(output_swap&) = delete;
public:
output_swap( ) noexcept:
prevCP_( ::GetConsoleCP() )
{
::SetConsoleCP( CP_WINUNICODE );
::SetConsoleOutputCP( CP_WINUNICODE );
}
~output_swap() noexcept {
::SetConsoleCP( prevCP_ );
::SetConsoleOutputCP( prevCP_ );
}
private:
::DWORD prevCP_;
};
void draw_text(const wchar_t* text)
{
static ::HANDLE _out = ::GetStdHandle(STD_OUTPUT_HANDLE);
::DWORD written;
::WriteConsoleW( _out, text, std::wcslen(text), &written, nullptr );
}
int main(int argc, const char** argv) {
output_swap swap;
draw_text(L"┏━━━━━━━━━━━━━━━━━┓\n");
draw_text(L"┃ OK ┃\n");
draw_text(L"┗━━━━━━━━━━━━━━━━━┛\n");
return 0;
}
Также проверьте консольный шрифт в настройках консоли. Возможно, вам нужен растровый шрифт, но это также работает, например, для Consolas.
Если вам нужны консольные потоки ввода-вывода, которые могут работать как с юникодом, так и с переадресацией блоков, вы можете использовать моя библиотека