无法从NCURSES中的标准扩展ASCII字符中读取
我在尝试读取NCURSES中的扩展ASCII字符时遇到问题 我有这个计划:无法从NCURSES中的标准扩展ASCII字符中读取,c,ncurses,C,Ncurses,我在尝试读取NCURSES中的扩展ASCII字符时遇到问题 我有这个计划: #include <ncurses.h> int main () { initscr(); int d = getch(); mvprintw(0, 0, "letter: %c.", d); refresh(); getch(); endwin(); return 0; } 然后我必须输入另一个,程序才能结束 如果我在扩展ascii中键入一个字符,如
#include <ncurses.h>
int main () {
initscr();
int d = getch();
mvprintw(0, 0, "letter: %c.", d);
refresh();
getch();
endwin();
return 0;
}
然后我必须输入另一个,程序才能结束
如果我在扩展ascii中键入一个字符,如“á”字符,我会得到:
letter: e.
letter: .
节目结束了
它类似于第二个字节被读取为另一个字符
我怎样才能得到正确的字符
谢谢 要键入的字符需要程序设置区域设置。如以下文件所述: 除此之外,您的区域设置很可能使用UTF-8。要使用UTF-8,您应该编译并链接ncursesw库 此外,
getch
函数只返回单字节编码的值,例如ISO-8859-1,有些人会混淆它,然后返回“扩展ASCII”(这表示两个错误没有消除)。UTF-8是一种多字节编码。如果您使用getch
读取该字符,您将获得该字符的第一个字节
相反,要读取UTF-8,您应该使用(除非您想自己解码UTF-8)。这是一个经过修订的计划:
#include <ncurses.h>
#include <locale.h>
#include <wchar.h>
int
main(void)
{
wint_t value;
setlocale(LC_ALL, "");
initscr();
get_wch(&value);
mvprintw(0, 0, "letter: %#x.", value);
refresh();
getch();
endwin();
return 0;
}
没有标准的“扩展ASCII”。只是一堆不同的编码。目前还不清楚您的终端使用哪一种,可能是UTF-8,它是一种可变长度代码。因此,您必须读取多个
char
s才能组成一个字符。您应该验证并检查ncurses是否提供了处理此问题的函数,例如,使用widechar
s。我不知道ncurses,但Windowsconio.h
functiongetch()
在按下某些键(如功能键)时,在连续调用时返回2个值。编写一个简单的程序来显示连续按键的(数字)结果。我正在链接ncursesw。我添加了setlocale(LC_ALL,“”);在initscr()之前,但现在我得到。。“etter:M-!”,没有引号..我让它在另一台计算机上工作,就像你展示的那样!!是否存在类似“mvwprintw”的函数,但用于宽字符???
#include <ncurses.h>
#include <locale.h>
#include <wchar.h>
int
main(void)
{
wint_t value;
setlocale(LC_ALL, "");
initscr();
get_wch(&value);
mvprintw(0, 0, "letter: %#x.", value);
refresh();
getch();
endwin();
return 0;
}
#include <ncurses.h>
#include <locale.h>
#include <wchar.h>
int
main(void)
{
wint_t value;
setlocale(LC_ALL, "");
initscr();
get_wch(&value);
mvprintw(0, 0, "letter: %#x (%lc).", value, value);
refresh();
getch();
endwin();
return 0;
}