gpt4 book ai didi

c++ - 如何在C++中输出unicode盒图?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:03:26 24 4
gpt4 key购买 nike

抱歉听起来很简单,但我正在尝试使用 https://en.wikipedia.org/wiki/Box-drawing_character 中的 unicode 字符在 Visual Studio 2017 中绘制一个简单的框使用下面的代码

#include <iostream>
using namespace std;
int main()
{
cout << "┏━━━━━━━━━━━━━━━━━┓" << endl;
cout << "┃" << endl;

等等……

但是,每当我运行它时,上面所有的代码都简单地输出为一个 ?哪里应该有一条线。

那么是否可以将这样的代码直接输出到控制台,或者我是否必须为每个字符写入数值?

最佳答案

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;
}

同时检查你的控制台font , 在控制台设置中。您可能需要光栅字体,但这也适用于例如 Consolas。

如果您需要控制台 io 流,它可以使用 unicode 以及框驱动,您可以使用 my library

关于c++ - 如何在C++中输出unicode盒图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55302067/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com