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

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

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


person Community    schedule 09.01.2014    source источник
comment
Можете ли вы опубликовать простой пример и результат, который он вам дает? Скорее всего проблема в настройках вашего терминала.   -  person kalhartt    schedule 12.01.2014


Ответы (1)


Вы не должны думать о таких символах, как смайлик, как об «обычных кодах ASCII», потому что на самом деле они вообще не являются ASCII. (ASCII охватывает только символы 32-127, а также несколько управляющих кодов до 32.) Это особый случай, и единственная причина, по которой вы можете видеть их (я полагаю?) в своей оболочке CMD Windows, заключается в том, что это поддержание обратной совместимости с IBM Code Page 437 (или аналогичной) из древних систем 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 и распечатать их вместо этого. (Этот подход также является переносимым, хотя сомнительно, будут ли символы присутствовать на не-ПК.)

person William McBrine    schedule 01.03.2014