可以使用mvprintw(),curses函数与通常的ascii代码一起工作吗?

时间:2014-01-09 21:36:55

标签: ascii ncurses curses extended-ascii pdcurses

我开发了一款小型控制台C ++游戏,它使用ASCII图形,暂时使用cout。但是因为我想让事情变得更好,所以我必须使用pdcurses。事情是像printw()或mvprintw()这样的curses函数不使用常规的ascii代码,对于这个游戏我真的需要使用笑脸字符,心脏,黑桃等。

有没有办法让curses使用常规的ascii代码?

1 个答案:

答案 0 :(得分:1)

你不应该把像笑脸这样的字符想象成“常规ASCII码”,因为它们根本就不是ASCII。 (ASCII只包括字符32-127,加上32下的一些控制代码。)它们是一个特殊情况,你能够看到它们(我假设?)你的Windows CMD shell的唯一原因是它是保持与古代DOS系统的IBM Code Page 437(或类似)的向后兼容性。同时,在DOS框之外,Windows使用完全不同的映射,Windows-1252(ISO-8859-1的修改版本)或类似的,用于其8位,所谓的“ANSI”字符集。但与Unicode相比,这两种类型的字符集都已过时。困惑了吗? :)

使用curses,最好的办法是尽可能使用纯ASCII和定义的ACS_ *宏。这将是便携式的。但它不会让你笑脸。使用PDCurses,有几种方法可以获得笑脸:如果您可以安全地假设您的控制台使用了适当的代码页,那么您可以传递A_ALTCHARSET属性,或者'加上角色,addch();或者你可以使用addrawch();或者你可以在打印角色之前调用raw_output(TRUE)。 (这些都大致相同。)或者,您可以使用PDCurses的“宽”版本,找出CP437字符的Unicode等价物,然后打印它们。 (这种方法也是可移植的,尽管这些角色是否会出现在非PC上是值得怀疑的。)