如何在 C++ Setfill() 中使用 Unicode

How to use Unicode in C++ Setfill()

更新 #2: 无法在 Setfill 中使用 Unicode。现在正在寻找替代品。

感谢所有帮助过的人!

更新: 感谢 jkb,我意识到我正在使用指针。但是,现在我仍然坚持如何将 unicode 放入 char 以便在 SetFill() 中使用。这是我的新问题。


原题:

我正在尝试为我的 Setfill() 使用 Unicode Character,但我不明白为什么这不起作用。 Setfill() 想要一个 Char,而 'line' 是一个在 std::cout 中显示得很好的 Char。但是我收到错误消息:“setfill 的字符类型错误”

char line = u8"\u2501";

cout << setfill(line) << setw(10) << "┛"; // 错误:setfill

的字符类型错误

cout << line << endl; // 正确显示行

我搜索了与在 Setfill 中使用 Unicode 相关的内容,但没有找到与我需要的内容相近的内容。我试过上面的代码,我直接粘贴字符:Setfill('━')但是没有用。

当我被卡住时,如果能向正确的方向点头表示感谢。

提前致谢!


编辑:我根据jkb所说的修改了第一行代码:

line is not a char type, it is a char * (pointer) type. – jkb

以前是这样的:

const char* line = u8"\u2501";

Unicode 有多种格式。 UTF-8 是一种将大多数典型英文字符编码为单个字节的格式。但是,要对数万个 Unicode 字符中的许多字符进行编码,需要的不仅仅是一个字节。

但是,setfill() 适应与它一起使用的流。 cout 不是宽字符(UTF-16、16 位、2 字节)流。所以你选择的角色不适合

如另一个答案中所提供的。以下代码可能会满足您的需要。

std::wcout << std::setfill(L'\u2501') << std::setw(10) << L'\u251b' << std::endl;

函数wcoutcout的宽字符版本。

如果要输出宽字符,需要使用wostream。

std::wcout << std::setfill(L'\u2501') << std::setw(10) << L'\u251b' << std::endl;

应该做你想做的。

您可能需要在 Linux 上正确设置语言环境:

std::setlocale(LC_ALL, "");

在尝试输出任何内容之前在 main 中调用。否则,它将使用不支持 unicode 的默认 C 语言环境。