带有 ncurses 的 C99 UTF8 字符
C99 UTF8 characters with ncurses
我正在尝试 ncurses
并且遇到了问题。我想用 Unicode 块字符 (U+2588, █) 绘制一个简单的框,但我无法正确显示它:
如你所见,我要的字符显示为~H
。
我按照 a similar question 的说明进行了发球。最小工作示例:
#include <locale.h>
#include <ncurses.h>
int main() {
setlocale(LC_ALL, ""); // must be caled before initscr
WINDOW *win = initscr();
int w, h;
getmaxyx(win, h, w);
// should fill the left half of the
// terminal window with filled block characters
int i, j;
for (i = 0; i < h; i++) {
for (j = 0; j < w/2; j++) {
mvaddch(x, y, L'\u2588');
}
}
refresh(); // show changes
getch(); // wait for user input
endwin(); // kill window
return 1;
}
编译:
gcc main.c -o main -std=c99 -lncurses
我的 PC 语言环境是 en_US.UTF-8
,我使用的是 suckless 终端,当然是 perfectly capable of dislaying utf8:
这是一个非常简单的程序,我不确定这里出了什么问题。有什么建议吗?
手册页给出了一个short overview of data-types,用于函数参数。
在示例中,L'\u2588'
是一个 宽字符 ,它将存储在 wchar_t
中类型。
我正在尝试 ncurses
并且遇到了问题。我想用 Unicode 块字符 (U+2588, █) 绘制一个简单的框,但我无法正确显示它:
如你所见,我要的字符显示为~H
。
我按照 a similar question 的说明进行了发球。最小工作示例:
#include <locale.h>
#include <ncurses.h>
int main() {
setlocale(LC_ALL, ""); // must be caled before initscr
WINDOW *win = initscr();
int w, h;
getmaxyx(win, h, w);
// should fill the left half of the
// terminal window with filled block characters
int i, j;
for (i = 0; i < h; i++) {
for (j = 0; j < w/2; j++) {
mvaddch(x, y, L'\u2588');
}
}
refresh(); // show changes
getch(); // wait for user input
endwin(); // kill window
return 1;
}
编译:
gcc main.c -o main -std=c99 -lncurses
我的 PC 语言环境是 en_US.UTF-8
,我使用的是 suckless 终端,当然是 perfectly capable of dislaying utf8:
这是一个非常简单的程序,我不确定这里出了什么问题。有什么建议吗?
手册页给出了一个short overview of data-types,用于函数参数。
在示例中,L'\u2588'
是一个 宽字符 ,它将存储在 wchar_t
中类型。