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

时间:2014-11-25 17:56:25

标签: c linux

所以我开始放置一个char数组 字符符号[52] = {' \ x03' ,' \ x04'等。等等。) 我第一次这样做,它实际上打印了心脏,黑桃等,但在将我的系统区域设置更改为韩国之后(如果这是导致它的idk),它开始给我奇怪的符号无关用它。 我也尝试在另一台计算机上进行,它实际上正确地编译了符号。 然而,然后我尝试将它移到linux上,它打印出一个奇怪的方块,其中有一个0 0 0 3。

有谁知道为什么会出现这些符号?还是有更好的方法来打印这些符号?

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

4 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:1)

'\x03等字符是控制字符\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,但您可以通过设置区域设置来改变它。

答案 2 :(得分:0)

如果你的Linux终端字符集设置为UTF-8,就像通常那样,那么你应该能够显示你拥有字体的所有Unicode字形。套装符号位于\ u2660附近。

printf("A\u2660");

应打印" A"和铲子符号,例如。

答案 3 :(得分:0)

在Linux上:

  1. 验证您的区域设置是否设置为<somelanguage>_<SOMEPLACE>.UTF-8(在区域中输入locale)。
  2. 在网络上查找Unicode图表。确认您可以使用鼠标复制有趣的字符并将其粘贴到terninal。
  3. 了解UTF-8是什么。
  4. 编写程序。
  5. 当它不起作用时,使用sonething搜索此站点,如#34;如何在Linux中打印utf-8&#34;。有大量的相关答案。您希望按照语言标准的要求在程序开头调用setlocale(LC_ALL, ""),并使用char,而不是wchar_t
  6. 在Windows上:

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