我正在开发一款纸牌游戏,并希望打印出心形,钻石,黑桃和俱乐部的符号.我的目标平台是Linux.
在Windows中,我知道如何打印这些符号.例如,要打印一个心脏(ASCII),我写了...
// in Windows, print a ASCII Heart
#include <iostream>
using std::cout;
using std::endl;
int main()
{
char foo = '\3';
cout << heart << endl;
system ( "PAUSE" );
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但是,正如我所提到的,心脏符号不会在Linux中打印出来.是否有标准库可用于在Linux和Windows中打印出心形,钻石,黑桃和俱乐部的符号?到目前为止我一直在研究的是查看Unicode,因为我的理解是这是普遍的.
感谢您提供的任何帮助.
Joe*_*oey 13
如果您想要一种可移植的方式,那么您应该使用Unicode代码点(已定义与其关联的字形):
? U+2660 Black Spade Suit
? U+2661 White Heart Suit
? U+2662 White Diamond Suit
? U+2663 Black Club Suit
? U+2664 White Spade Suit
? U+2665 Black Heart Suit
? U+2666 Black Diamond Suit
? U+2667 White Club Suit
Run Code Online (Sandbox Code Playgroud)
请记住,ASCII中字符32下面的所有内容都是控制字符.它们具有与它们相关的含义,并且您无法保证在其中获得字形或行为(即使大多数控制字符具有字形,尽管它们从不打算打印).不过,这不是一个安全的赌注.
但是,使用Unicode需要适当的字体和编码支持,这可能是也可能不是UNIX喜欢的问题.
在Windows上,如果控制台设置为光栅字体(因此不支持Unicode或当前设置的OEM代码页以外的任何其他内容),则至少上述某些代码点会映射到您输出的ASCII控制字符字形.这仅适用于黑色变体,因为白色变体没有等效物.
在Linux上,您几乎总是可以将UTF-8写入stdout,并且Unicode字符将显示得很漂亮.
#include <iostream>
const char heart[] = "\xe2\x99\xa5";
int main() {
std::cout << heart << '\n';
return 0;
}
Run Code Online (Sandbox Code Playgroud)
您可以在像fileformat.info这样的网站上找到UTF-8 Unicode字符编码(搜索该页面为"UTF-8(hex)").
另一种方法是使用宽字符.你首先需要打电话setlocale来设置.然后,只需用wchar_t代替char和wcout代替的cout.
#include <iostream>
#include <clocale>
const wchar_t heart[] = L"\u2665";
int main() {
setlocale(LC_ALL, "");
std::wcout << heart << L'\n';
return 0;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
34749 次 |
| 最近记录: |