Показывает ли эта программа четыре масти карт (♠ ♣ ♥ ♦) на всех стандартных системах? - PullRequest
4 голосов
/ 23 января 2010

Следующее показывает ♠ ♣ ♥ ♦ на 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 ]

13 голосов
/ 23 января 2010

Неа. По моему опыту, кодировка символов очень зависит от платформы.

Учтите, что в ASCII эти символы даже не существуют . И я понятия не имею, где они находятся в Юникоде. И где бы они ни находились, вы бы зависели от того, как ваша платформа выводит Unicode.

12 голосов
/ 23 января 2010

Нет, это управляющие символы в ASCII. Терминал, на котором вы их распечатываете, использовал CP437 , который был набором символов исходного IBM PC. Он использует ту же нумерацию для символов, которые есть в ASCII, но расширенную ASCII с акцентированными буквами, греческими буквами, символами рисования прямоугольников и несколькими дингбатами. Само собой разумеется, это абсолютно непереносимо; ваша программа будет работать только в командном терминале Windows, а не в любой другой системе; и эти символы даже не будут работать правильно в более распространенной кодировке Windows, CP1252 .

Если вы хотите печатать специальные символы переносным способом, вы должны использовать Unicode , который является универсальным набором символов, в котором масти карт имеют значение 0x2660–0x2667 . См. Абсолютный минимум, который должен знать каждый разработчик программного обеспечения Абсолютно, положительно, необходимо знать о Юникоде и наборах символов (никаких оправданий!) , чтобы получить общий обзор Юникода.

Обратите внимание, что способ, позволяющий приложению использовать Unicode, различается в Unix и Windows , и вам все равно нужно конвертировать различные кодировки, поскольку Unicode имеет более одной кодировки (включая частичные кодировки, такие как устаревшие наборы символов), но по крайней мере вы можете работать с одним и тем же универсальным набором символов независимо от того, на какой платформе вы работаете или используете кодировку.

7 голосов
/ 23 января 2010

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 голосов
/ 23 января 2010

Распечатка управляющих символов (и это низкие значения), которые обычно не используются (например, \ n), приведет к различным результатам на разных платформах.

Один из подходов к кроссплатформенности - это Unicode (костюмы указаны на странице игровых символов , хотя такие символы обычно не поддерживаются в шрифтах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...