这个程序是否在所有标准系统上显示四种卡套装(♠♣♥♦)?

y2k*_*y2k 4 c c++ character-encoding

以下显示windows♣♥♦在Windows XP上,它将适用于所有系统吗?

#include <stdio.h>
int main(int argc, char *argv[])
{
    for (int i = 3; i <= 6; ++i)
        printf("%c", (char)i);

    getchar();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

GMa*_*ckG 13

不.根据我的经验,字符编码是一个非常依赖平台的.

考虑一下,在ASCII中,这些字符甚至不存在.我不知道它们在Unicode中的位置.无论它们在哪里,您都将依赖于您的平台如何输出Unicode.

  • 什么是"王牌"答案. (11认同)
  • 是的 - 它非常适合这个问题. (11认同)
  • 哦,我为你感到高兴. (11认同)
  • 停止打屁股,否则我会把你逼到死! (11认同)
  • 一堆笑话 (11认同)
  • @Brian:关于决定谁是双关语的国王或女王,以及谁知道杰克. (4认同)
  • 这些评论像纸牌屋一样崩溃了. (3认同)
  • 套装的Unicode代码点为0x2660到0x2667.四个是纯黑色,四个是白色,黑色轮廓. (2认同)

Bri*_*ell 12

不,这些是ASCII 中的控制字符.您使用的CP437打印出的终端,CP437是原始IBM PC的字符集.它对ASCII格式的字符使用相同的编号,但使用带重音字母,希腊字母,方框图字符和一些装饰字符的扩展ASCII.不用说,它完全不便携; 您的程序只能在Windows命令终端中运行,而不能在任何其他系统上运行; 这些字符在更常见的Windows编码CP1252中甚至无法正常工作.

如果要打印出特殊字符,则应使用Unicode,这是一种通用字符集,其中卡适用于0x2660-0x2667.有关Unicode的高级概述,请参阅绝对最低每个软件开发人员,绝对必须知道关于Unicode和字符集(没有借口!).

请注意,如何使您的应用程序使用Unicode在UnixWindows之间有所不同,并且您仍然需要在不同编码之间进行转换,因为Unicode具有多个编码(包括部分编码,例如遗留字符集),但至少您可以工作无论你使用什么平台或编码你使用相同的通用字符集.


Mik*_*one 7

适用于西装的Unicode和UTF-8:

  • ♠= 0x2660 = 0xE2 0x99 0xA0
  • ♥= 0x2665 = 0xE2 0x99 0xA5
  • ♦= 0x2666 = 0xE2 0x99 0xA6
  • ♣= 0x2663 = 0xE2 0x99 0xA3
  • ♤= 0x2664 = 0xE2 0x99 0xA4
  • ♡= 0x2661 = 0xE2 0x99 0xA1
  • ♢= 0x2662 = 0xE2 0x99 0xA2
  • ♧= 0x2667 = 0xE2 0x99 0xA7

Mac OS X角色搜索调色板FTW.

它可能看起来像代码混合,但有一种方法.0x2660..0x2663是标准四,白色而不是红色(♠♡♢♣),而0x2660..0x2663是相同的颜色反转设置(♤♥♦♧).

PS不要试图破坏双关语的乐趣,但我想有人会想要一个答案"好吧,标准的方式应该是什么?"