【问题标题】:Displaying accented characters with pdcurses使用 pdcurses 显示重音字符
【发布时间】:2016-11-20 18:11:40
【问题描述】:
#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 无论如何都没有解决问题)。

带有 g++ 6.1.0 的 Windows 10 64 位。

【问题讨论】:

    标签: c windows pdcurses


    【解决方案1】:

    我很傻。 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 之前当然会转为负数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-23
      • 1970-01-01
      • 1970-01-01
      • 2015-01-09
      • 1970-01-01
      • 2013-03-25
      相关资源
      最近更新 更多