使用 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
之前绕回变成负数。
#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
之前绕回变成负数。