Может ли функция mvprintw(), curses работать с обычными кодами ascii?

Я разработал небольшую консольную игру C++, которая использует графику ASCII, на данный момент используя cout. Но поскольку я хочу, чтобы все работало лучше, я должен использовать pdcurses. Дело в том, что функции curses, такие как printw() или mvprintw(), не используют обычные коды ascii, и для этой игры мне действительно нужно использовать смайлики, сердце, пики и так далее.

Есть ли способ заставить проклятия работать с обычными кодами ascii?

1 ответ

Вы не должны думать о таких символах, как смайлик, как о "обычных кодах ASCII", потому что они на самом деле совсем не являются ASCII. (ASCII охватывает только символы 32-127 плюс несколько контрольных кодов до 32.) Это особый случай, и единственная причина, по которой вы можете видеть их в (я предполагаю?) Вашей оболочке Windows CMD, заключается в том, что она поддержание обратной совместимости с кодовой страницей IBM (или аналогичной) из древних систем DOS. Между тем, за пределами DOS-бокса Windows использует совершенно другое отображение, Windows-1252 (модифицированная версия ISO-8859-1) или подобное, для своего 8-битного, так называемого набора символов "ANSI". Но оба эти типа наборов символов устарели по сравнению с Unicode. Смущены еще?:)

С помощью curses лучше всего использовать чистый ASCII, а также, по возможности, определенные макросы ACS_*. Это будет портативным. Но это не принесет тебе смайлика. С помощью PDCurses есть несколько способов получить это смайлик: если вы можете с уверенностью предположить, что ваша консоль использует соответствующую кодовую страницу, вы можете передать A_ALTCHARSET атрибут, или 'с символом, чтобы addch(); или вы можете использовать addrawch(); или вы можете позвонить raw_output(TRUE) перед печатью персонажа. (Все они примерно эквивалентны.) В качестве альтернативы, вы можете использовать "широкую" сборку PDCurses, выяснить Unicode-эквиваленты символов CP437 и распечатать их. (Этот подход также переносим, ​​хотя сомнительно, будут ли символы присутствовать на других компьютерах.)

Другие вопросы по тегам