使用 pdcurses 显示重音字符

Displaying accented characters with pdcurses

#include <curses.h>

int main(){

    initscr();

    for(int i = -128; i < 128; ++i)
        addch(i);

    getch();
    endwin();

}

Pdcurses 显示字符 -128 到 0(128 到 255)的空白。有没有办法至少让 é 等重音字符正确显示? iostream没问题:

int main(){

    for(int i = -128; i < 128; ++i)
    std::cout << char(i);

}

我编译了支持宽字符和 UTF 的 pdcurses,尽管这肯定不是这里的问题,对吧? (由于我想要的字符包含在0-255内,并且使用add_wch代替并没有解决问题)。

Windows 10 64 位,g++ 6.1.0。

我很傻。 addch 接受类型 chtype 的值。除了表示字符之外,文档对 chtype 的实际类型不太清楚。查看 curses.h 我可以看到 chtype 是 unsigned long 类型。因此负 i 值被转换为 unsigned 并因此环绕,导致 curses 不得不打印没有分配 ASCII 表示的字符。我也迷路了,因为这个看似相似的代码不使用负值产生了相同的结果:

int main(){

    initscr();

    for(int i = 0; i < 255; ++i)
        addch(char(i));

    getch();
    endwin();

}

直到我记得默认情况下 char 可能是有符号的,所以 char(i) 当然会在调用 addch 之前绕回变成负数。