我一直在用c ++编写程序,并决定使用curses是一种更好的做事方式(使事情跨平台)。它大部分工作正常,但有一个问题。在我的原始代码中,每当我写std::cout << char(30)
时,它都会输出▲
。我在程序的一部分中使用了这个。现在,当我使用addch(char(30))
时,它会写^[something I don't know because it's overwritten by something else]
。
我一直在寻找如何解决这个问题。人们说诅咒包含的一些特殊字符,但它们都不是我想要的。人们说我应该尝试使用-lncursesw
,但我的编译器找不到它。我知道这是一个unicode角色,但为什么我之前能够使用呢?
我在Windows上使用mingw64来编译我的代码。只要它是跨平台的,我可以通过许多不同的方法来修复它。我可以尝试找到一些使unicode工作的方法(但事实是我不能使用-lncursesw
似乎说我不能)。我可以包括一个字符表,但我不知道如何做到这一点或如何使诅咒使用它。最后,我只想知道:我如何使用cout
通常可以使用的这些特殊字符?
答案 0 :(得分:0)
您依赖于特定的代码页或字符集。解决此问题的可移植方法是使用宽字符和Unicode等效字符。试试这个:
#include <iostream>
#include <locale>
int main()
{
constexpr wchar_t uptriangle = L'\u25B2';
std::locale::global(std::locale(""));
std::wcout.imbue(std::locale());
std::wcout << uptriangle << std::endl;
return 0;
}
您需要在支持UTF-8的版本中使用宽字符版本的ncurses或输出u8"\u2582"
,例如Windows代码为65001或Unix为UTF8语言环境。
答案 1 :(得分:0)