Вы не должны думать о символах, таких как смайлик, как «обычные коды ASCII», потому что они действительно не ASCII. (ASCII охватывает только символы 32-127, плюс несколько управляющих кодов до 32.) Это особый случай, и единственная причина, по которой вы можете их увидеть (я полагаю?), Ваша оболочка Windows CMD - это то, что она поддерживая обратную совместимость с IBM Code Page 437 (или аналогичным) из старых DOS-систем. Между тем, вне поля DOS, Windows использует совершенно другое сопоставление, Windows-1252 (модифицированная версия ISO-8859-1) или аналогичная для своего 8-битного, так называемого «ANSI» набора символов. Но оба эти набора наборов символов устарели, по сравнению с Unicode. Еще не запутались? :)
С проклятиями лучше всего использовать чистый ASCII, а также определенные макросы ACS_ *, где это возможно. Это будет переносимым. Но это не заставит вас улыбаться. С помощью PDCurses существует несколько способов получить этот смайлик: Если можно с уверенностью предположить, что ваша консоль использует соответствующую кодовую страницу, то вы можете передать атрибут A_ALTCHARSET
, или с символом, до addch()
; или вы можете использовать addrawch()
; или вы можете позвонить raw_output(TRUE)
перед печатью символа. (Все они примерно эквивалентны.) Альтернативно, вы можете использовать «широкую» сборку PDCurses, выяснить эквиваленты Unicode для символов CP437 и напечатать их. (Этот подход также переносим, хотя сомнительно, будут ли персонажи присутствовать на не-ПК.)
Можете ли вы опубликовать простой пример и результат его выдачи? Вероятно, это проблема с настройками вашего терминала. – kalhartt