Игра в карты Unicode для печати на C ++ - PullRequest
0 голосов
/ 12 июня 2018

Согласно этой вики-ссылке , игральные карты имеют Unicode вида U + 1f0a1.Я хотел создать массив в C ++ для хранения 52 стандартных игральных карт, но я заметил, что этот Unicode длиннее 2 байт.

Так что мой простой пример ниже не работает, как мне сохранить Unicode-символ, которыйдлиннее 2 байтов?

wchar_t t = '\u1f0a1';
printf("%lc",t);

Приведенный выше код усекает t до \u1f0a

Ответы [ 2 ]

0 голосов
/ 12 июня 2018

как сохранить длиннее двухбайтового символа Юникода?

Вы можете использовать char32_t с префиксом U, но нет возможности распечатать его на консоли.Кроме того, вам вообще не нужно char32_t, достаточно utf-16 для кодирования этого символа.wchar_t t = L'\u2660', вам нужен префикс L, чтобы указать, что это широкий символ.


Если вы используете Windows с компилятором Visual C ++, я рекомендую способ:

  1. Сохраните ваш исходный файл в кодировке utf-8
  2. установите параметр компиляции /utf-8, ссылка здесь .
  3. используйте консоль с поддержкой utf-8, закодированную как Git Bash чтобы увидеть результат.

enter image description here

0 голосов
/ 12 июня 2018

В Windows wchar_t хранит кодовую единицу UTF-16, вы должны хранить вашу строку как UTF-16 (используя строковый литерал с префиксом ). Это также не поможет, так как окнаКонсоль может выводить символы только до 0xFFFF.Смотрите это:

Как использовать символы Юникода в командной строке Windows?

...