我试图在NCURSES中读取扩展的ASCII字符时遇到问题 .
我有这个程序:
#include <ncurses.h>
int main () {
initscr();
int d = getch();
mvprintw(0, 0, "letter: %c.", d);
refresh();
getch();
endwin();
return 0;
}
我用它构建它:gcc -lncursesw a.c
如果我在7位ascii中键入一个字符,就像'e'字符,我得到:
letter: e.
然后我必须输入另一个程序来结束 .
如果我在扩展的ascii中输入一个字符,比如'á'字符,我得到:
letter: .
程序结束 .
它就像第二个字节被读作另一个字符 .
我怎样才能得到正确的char'á'???
谢谢!
1 回答
要键入的字符需要程序来设置区域设置 . 如_775969中所述:
过去,您的语言环境可能使用UTF-8 . 要使用UTF-8,您应该编译并链接到ncursesw库 .
此外,
getch
函数仅返回单字节编码的值,例如ISO-8859-1,有些人与Windows cp1252混淆,从而"Extended ASCII"(其中有两个谬误没有取消) . UTF-8是一种多字节编码 . 如果您使用getch
来读取它,您将获得该字符的第一个字节 .相反,要读取UTF-8,您应该使用get_wch(除非您想自己解码UTF-8) . 这是一个修订的程序,它可以:
我将结果打印为数字,因为printw不知道Unicode值 .
printw
使用与printf
相同的C运行时支持,因此您可以直接打印该值 . 例如,我看到POSIX printf有一个用于处理wint_t
的格式化选项:由于ncurses可以在许多平台上运行,因此并非所有平台都支持该功能 . 但是你可以假设它适用于GNU C库:大多数发行版通常提供可行的语言环境配置 .
这样做,这个例子更有趣: