如何在C和Linux中打印黑桃,红心,钻石等?

所以我开始放置一个char char符号数组[52] = {'\ x03','\ x04'等。 等等),第一次我做到了,它实际上打印了心脏,黑桃等等,但是在把我的系统语言环境改为韩语语言之后,它开始给我一些奇怪的符号,与它无关。 我也试图在另一台电脑上做,并且正确地编译了这些符号。 然后,我试着把它移动到Linux上,它打印奇怪的正方形,其中有0 0 0 3。

有谁知道为什么这些出现或有更好的方式来打印这些符号?

PS:我在Windows中使用Visual Studio,然后在Linux中使用.c代码

Linux系统通常使用UTF-8编码,其中:

  • ♠= U + 2660 =“\ xE2 \ x99 \ xA0”
  • ♣= U + 2663 =“\ xE2 \ x99 \ xA3”
  • ♥= U + 2665 =“\ xE2 \ x99 \ xA5”
  • ♦= U + 2666 =“\ xE2 \ x99 \ xA6”

编辑:不幸的是, Windows命令提示符不支持UTF-8,但使用旧的DOS代码页。 如果你希望你的程序跨平台的工作,你将不得不做一些事情:

#if defined(_WIN32) || defined(__MSDOS__) #define SPADE "\x06" #define CLUB "\x05" #define HEART "\x03" #define DIAMOND "\x04" #else #define SPADE "\xE2\x99\xA0" #define CLUB "\xE2\x99\xA3" #define HEART "\xE2\x99\xA5" #define DIAMOND "\xE2\x99\xA6" #endif 

'\x03这样的字符控制字符 。 特别是当你输入Control-C时你得到的字符(尽管输入那个字符通常有其他的效果)。

一些字体碰巧分配图像来控制字符。 据我所知,这样做没有标准。 显然在你以前的配置中,一些控制字符碰巧显示为扑克牌套装符号。

这些符号有标准的Unicode字符:

 2660 BLACK SPADE SUIT 2661 WHITE HEART SUIT 2662 WHITE DIAMOND SUIT 2663 BLACK CLUB SUIT 2664 WHITE SPADE SUIT 2665 BLACK HEART SUIT 2666 BLACK DIAMOND SUIT 2667 WHITE CLUB SUIT 

(数字是十六进制的。)

不同的系统以不同的方式编码Unicode。 Windows通常使用某种形式的UTF-16。 Linux通常使用UTF-8,但您可以通过设置区域设置来改变它。

如果你的Linux终端字符集被设置为UTF-8,那么你应该能够显示你所有字体的Unicode字形。 西装符号在\ u2660附近。

 printf("A\u2660"); 

例如,应该打印“A”和黑桃符号。

在Linux上:

  1. 验证您的语言环境设置为<somelanguage>_<SOMEPLACE>.UTF-8 (在共同体中输入locale )。
  2. 在网上找到一个Unicode图表。 确认你可以用鼠标复制有趣的角色并粘贴到terninal。
  3. 了解什么是UTF-8。
  4. 写一个程序。
  5. 当它不起作用,使用sonething搜索这个网站,如“如何在Linux中打印utf-8”。 有相关的答案吨和吨。 你想在你的程序的开头按照语言标准的要求调用setlocale(LC_ALL, "") ,并使用char而不是wchar_t

在Windows上:

  1. 放弃并哭泣。 不完全是。
  2. 在控制台中键入chcp 65001 。 不完全是!
  3. 将控制台字体设置为Lucida。 不完全是!!!
  4. 复制你的Linux程序并编译并运行它。 (你确实希望在两个操作系统上使用相同的程序源代码,对不对?)如果不起作用,请在线搜索解决方案。
  5. 转到1。