很抱歉,听起来似乎很简单,但我试图使用下面的代码,使用https://en.wikipedia.org/wiki/Box-drawing_character中的unicode字符在Visual Studio 2017中绘制一个简单的框
#include <iostream>
using namespace std;
int main()
{
cout << "┏━━━━━━━━━━━━━━━━━┓" << endl;
cout << "┃" << endl;
以此类推...
但是,每当我运行它时,以上所有代码都简单地输出为??哪里应该有一条线。
那么是否可以将这样的代码直接输出到控制台,或者我必须为每个字符写每个字符的数字值?
答案 0 :(得分:1)
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
答案 1 :(得分:0)
如果模式设置正确,Windows控制台应用程序可以直接将宽字符串(L"..."
)输出到终端。还请注意wcout
的使用。将以下源保存为UTF-8编码:
#include <iostream>
#include <io.h>
#include <fcntl.h>
using namespace std;
int main()
{
_setmode(_fileno(stdout), _O_U16TEXT);
wcout << L"┏━━━━━━━━━━━━━━━━━┓" << endl;
wcout << L"┃" << endl;
}
使用“ cl / EHsc / utf-8 test.cpp”进行编译。输出为:
┏━━━━━━━━━━━━━━━━━┓
┃