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

如何在C和Linux中打印黑桃、红桃、钻石等?,c,linux,C,Linux,所以我首先放置了一个char数组 字符符号[52]={'\x03','\x04'等…) 我第一次这么做的时候,它确实打印了红桃、黑桃等。但是在将我的系统区域设置更改为韩国区域设置(idk,如果这是原因的话)之后,它开始给我一些与之无关的奇怪符号。 我还试着在另一台计算机上做,它实际上正确地编译了符号。 然而,后来我试着将它转移到linux上,它打印了一个奇怪的方块,里面有一个03 有人知道为什么会出现这些符号吗?或者有没有更好的方法来打印这些符号 注意:我在Windows中使用Visual St

所以我首先放置了一个char数组 字符符号[52]={'\x03','\x04'等…) 我第一次这么做的时候,它确实打印了红桃、黑桃等。但是在将我的系统区域设置更改为韩国区域设置(idk,如果这是原因的话)之后,它开始给我一些与之无关的奇怪符号。 我还试着在另一台计算机上做,它实际上正确地编译了符号。 然而,后来我试着将它转移到linux上,它打印了一个奇怪的方块,里面有一个03

有人知道为什么会出现这些符号吗?或者有没有更好的方法来打印这些符号


注意:我在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

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

'\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,但您可以通过设置区域设置来改变这一点。

如果您的Linux终端字符集像往常一样设置为UTF-8,那么您应该能够显示您有字体的所有Unicode字形。套装符号在e\u2660的邻域

printf("A\u2660");

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

如果Linux终端字符集设置为UTF-8(通常是这样),那么您应该能够显示所有有字体的Unicode字形。套装符号在\u2660附近

printf("A\u2660");
例如,应打印“A”和黑桃符号。

在Linux上:

  • 验证您的区域设置是否设置为
    。.UTF-8
    (在术语表中键入
    locale
  • 在web上查找Unicode图表。验证是否可以用鼠标复制感兴趣的字符并将其粘贴到终端
  • 了解什么是UTF-8
  • 编写一个程序
  • 当它不起作用时,请使用诸如“如何在Linux中打印utf-8”之类的搜索工具搜索此网站。这里有大量的相关答案。您希望按照语言标准的要求,在程序开始时调用
    setlocale(LC_ALL,”)
    ,并使用
    char
    ,而不是
    wchar\u t
  • 在Windows上:

  • 放弃,哭吧。不,真的
  • 在控制台中键入
    chcp 65001
    。不,真的
  • 将控制台字体设置为Lucida。不,真的
  • 复制你的Linux程序,编译并运行它。(你想在两个操作系统上使用相同的程序源,对吗?)
  • 转到1
  • 在Linux上:

  • 验证您的区域设置是否设置为
    。.UTF-8
    (在术语表中键入
    locale
  • 在web上查找Unicode图表。验证是否可以用鼠标复制感兴趣的字符并将其粘贴到终端
  • 了解什么是UTF-8
  • 编写一个程序
  • 当它不起作用时,请使用诸如“如何在Linux中打印utf-8”之类的搜索工具搜索此网站。这里有大量的相关答案。您希望按照语言标准的要求,在程序开始时调用
    setlocale(LC_ALL,”)
    ,并使用
    char
    ,而不是
    wchar\u t
  • 在Windows上:

  • 放弃,哭吧。不,真的
  • 在控制台中键入
    chcp 65001
    。不,真的
  • 将控制台字体设置为Lucida。不,真的
  • 复制你的Linux程序,编译并运行它。(你想在两个操作系统上使用相同的程序源,对吗?)
  • 转到1

  • Visual Studio在Linux上运行吗?在Linux上,真的没有理由让您的终端不使用UTF-8,这样您就可以显示所有的Unicode,而不管您的语言环境如何。哦,不,我的意思是在Windows中使用Visual Studio,然后我在Linux中编译了.c文件对不起,mb!嗯,为什么在Visual Studio中它实际显示符号而不是I是Linux吗?@Seung:RO