Ncurses,unicode:某些终端上的问题
我正在尝试使Ncurses,unicode:某些终端上的问题,c,terminal,ncurses,curses,C,Terminal,Ncurses,Curses,我正在尝试使ncurses与unicodes一起工作。我找到了一本不错的教程。但是,我在以下代码中遇到问题: #include <locale.h> #include <curses.h> #include <stdlib.h> int main (int argc, char *argv[]) { setlocale(LC_ALL, ""); initscr(); printw("Euro\n"); printw("€\n");
ncurses
与unicodes一起工作。我找到了一本不错的教程。但是,我在以下代码中遇到问题:
#include <locale.h>
#include <curses.h>
#include <stdlib.h>
int
main (int argc, char *argv[])
{
setlocale(LC_ALL, "");
initscr();
printw("Euro\n");
printw("€\n"); // literal Unicode
printw("\u20ac\n"); // escaped Unicode (C99)
printw("%lc\n", L'€'); // wint_t
printw("%ls\n", L"€"); // wchar_t
addwstr(L"\u20AC\n"); // wchar_t
printw("\xe2\x82\xac\n"); // utf-8 encoded
addstr("\xe2\x82\xac\n"); // utf-8 encoded
for (int i = 0; i < 10; i++)
{
printw("%c %lc\n", '0' + i, L'0' + i);
}
getch();
endwin();
return EXIT_SUCCESS;
}
我不知道为什么我会收到这样的信息。事实上,在curses.h
中,我可以看到行
#define addwstr(wstr) waddwstr(stdscr,(wstr))
[...]
extern NCURSES_EXPORT(int) waddwstr (WINDOW *,const wchar_t *); /* generated:WIDEC */
我使用Arch作为发行版,并且定期安装ncurses
包
gcc-lncursesw-D_GNU_SOURCE-D_DEFAULT_SOURCE-o bin/main build/main.o
后,如果在某些控制台(即KDE Konsole)上运行该程序,则输出是丑陋的
Euro
~B
~B
~B
~B
0 1 2 3 4 5 6 7 8 9
而在另一种情况下(即嵌入vscode中的),输出是所需的:
Euro
€
€
€
€
€
€
€
0 0
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
setlocale(LC_ALL, "en_US.UTF-8");
为了使事情正常进行我以前遇到过一些关于诅咒的问题。它不是标准的Unix库,因此可移植性受到限制。将它与Unicode相结合只会使它变得更糟,因为并不是所有东西都支持它。您的问题可能与其中一个不兼容。您指的是问题1还是问题2?问题2。我不知道为什么会出现问题1,尽管您从
curses.h
中引用的是waddwstr
,而不是addwstr
,如1中的错误所示。请参阅编辑。第二个问题似乎已经解决。第一个仍然存在addwstr
是根据我编辑的waddwstr
定义的。或者,可能是重复的。无论哪种方式,手册页都是开始的地方。
setlocale(LC_ALL, "en_US.UTF-8");