Специальные символы на консоли - PullRequest
3 голосов
/ 12 апреля 2010

Я закончил свою игру в покер, но теперь я хочу, чтобы она выглядела немного лучше с отображением пиков, сердец, бриллиантов и треф. Я попытался ответить на этот вопрос: C ++: печать ASCII-сердца и бриллиантов с независимой платформой

Может быть, глупо, но я пытаюсь:

cout << 'U+2662' << endl;

Я не знаю, как это написать.

Ответы [ 3 ]

2 голосов
/ 12 апреля 2010

Чтобы вывести символ UTF-8, вам необходимо закодировать его как шестнадцатеричные байты. Я украду эту ссылку на fileinfo.com из ответа на вопрос, который вы связали - если вы перейдете к представлению UTF-8, там будет указано 0xE2 0x99 0xA5, и вы можете преобразовать его в "\xE2\x99\xA5" как строка.

Однако я не могу гарантировать, что ваша консоль будет отображать UTF-8, поэтому этот ответ может не помочь.

0 голосов
/ 12 апреля 2010

Вам нужно использовать std::wcout и использовать UTF-16, кодируя шестнадцатеричные байты (как отвечает Марк), но я не могу гарантировать, что любой из ваших символов будет отображаться правильно в Windows (до Vista?), Поскольку Windows Консоль никогда не была предназначена для такого рода вещей. Вы можете использовать wcout с Visual Studio и, возможно, Cygwin, но я не думаю, что MinGW поддерживает это. Убедитесь, что вы используете широкие литералы символов: L"string".

Кроме того, вы можете использовать препроцессор для предоставления правильных определений констант для каждой платформы. Я полагаю, что будет более трех ASCII на старых платформах, UTF-8 на более современных и UTF-16 (с wcout) на новых Windows.

0 голосов
/ 12 апреля 2010

Если вы просто пытаетесь использовать старые управляющие символы ASCII в консоли Windows, вы можете использовать:

cout << (char) 3 << (char) 4 << (char) 5 << (char) 6 << endl;
//hearts, diamonds, clubs, spades

Это не Unicode, и я предполагаю, что он не очень переносим. Я действительно не знаю портативного решения вашего вопроса.

...