如何在 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;
函数wcout
是cout
的宽字符版本。
如果要输出宽字符,需要使用wostream。
std::wcout << std::setfill(L'\u2501') << std::setw(10) << L'\u251b' << std::endl;
应该做你想做的。
您可能需要在 Linux 上正确设置语言环境:
std::setlocale(LC_ALL, "");
在尝试输出任何内容之前在 main
中调用。否则,它将使用不支持 unicode 的默认 C 语言环境。
更新 #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;
函数wcout
是cout
的宽字符版本。
如果要输出宽字符,需要使用wostream。
std::wcout << std::setfill(L'\u2501') << std::setw(10) << L'\u251b' << std::endl;
应该做你想做的。
您可能需要在 Linux 上正确设置语言环境:
std::setlocale(LC_ALL, "");
在尝试输出任何内容之前在 main
中调用。否则,它将使用不支持 unicode 的默认 C 语言环境。