在Mac OSX上使用wcout遇到的问题

5

我正在尝试使用Unicode字符在终端进行简单的框图绘制,但是我注意到wcout不会输出任何框图字符,甚至没有占位符。因此,我决定编写下面的程序并找出哪些Unicode字符得到支持,结果发现wcout拒绝输出超过255的任何内容。我需要做些什么才能让wcout正常工作?为什么无法访问任何扩展的Unicode字符?

#include <wchar.h>
#include <locale>
#include <iostream>

using namespace std;

int main()
{
    for (wchar_t c = 0; c < 0xFFFF; c++)
    {
        cout << "Iteration " << (int)c << endl;
        wcout << c << endl << endl;
    }

    return 0;
}
1个回答

5

我不建议使用wcout,因为它是非可移植的、效率低下的(总是执行转码),并且不支持所有的Unicode(例如代理对)。

相反,你可以使用开源的 {fmt} 库来打印包括方框绘图字符在内的可移植的Unicode文本,例如:

#include <fmt/core.h>

int main() {
  fmt::print("┌────────────────────┐\n"
             "│   Hello, world!    │\n"
             "└────────────────────┘\n");
}

打印 (https://godbolt.org/z/4EP6Yo):

┌────────────────────┐
│   Hello, world!    │
└────────────────────┘

声明: 我是{fmt}的作者。


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