c - Ncurses,unicode:某些终端上的问题
问题描述
我正在尝试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;
}
我可以将问题总结为两点
当我编译时,
gcc -c -Wall -Wextra -g -o build/main.o src/main.c
我收到消息src/main.c:19:3: warning: implicit declaration of function ‘addwstr’; did you mean ‘addstr’? [-Wimplicit-function-declaration]
我不知道为什么我会收到这样的消息。事实上,在
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
到底是怎么回事?你能告诉我如何让我的代码在没有警告的情况下编译并在每个控制台上工作吗?
编辑
我想我找到了问题 2) 的解决方案。使用就足够了
setlocale(LC_ALL, "en_US.UTF-8");
使事情正常进行
解决方案
推荐阅读
- npgsql - 以编程方式做 postgres \copy 所做的事情
- angular - 两个子组件之间的通信
- android - Cordova Android 7.1.1 (Android API 27 - 8.1) 应用程序崩溃
- do-while - 循环无限运行,无论输入的 int 是多少
- android - MVVM 中视图之间的通信
- c# - 跨度和二维数组
- c - 如何计算在 1 和 N 之间包含 3 的数字,其中 N 是给定的输入?
- cors - Access-Control-Allow-Headers 设置为 * 但在 Firefox 中仍然失败
- aframe - 使用使用 Microsoft Windows Mixed Reality 的 Lenovo 耳机查看 a-frame
- c - 使用带参数的Strcmp