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

时间:2010-01-23 03:44:32

标签: 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;
}

4 个答案:

答案 0 :(得分:13)

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

在ASCII中考虑那些字符don't even exist。我不知道它们在Unicode中的位置。无论它们在哪里,您将依赖于您的平台如何输出Unicode。

答案 1 :(得分:12)

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

如果您想要移植打印特殊字符,您应该使用Unicode这是一个通用字符集,其中卡适合0x2660–0x2667。有关Unicode的高级概述,请参阅The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)

请注意,启用应用程序使用Unicode的方式因UnixWindows而异,您仍然需要在不同的编码之间进行转换,因为Unicode具有more than one encoding(包括部分编码,例如作为遗留字符集),但至少你可以使用相同的通用字符集,无论你使用的是什么平台或正在使用的编码。

答案 2 :(得分: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是相同的颜色倒置(♤♥♦♧)。

P.S。不是试图破坏双关语的乐趣,但我认为有人会想要一个答案“好吧,标准方法应该是什么?”

答案 3 :(得分:3)

打印出不常用的控制字符(这是低值)(如'\ n')会在不同平台上产生不同的结果。

跨平台的一种方法是Unicode(套装在game symbols page上,虽然通常不支持字体中的这些字符。