/*
* To build:
* gcc -o curses curses.c -lncursesw
*
* Expected result: display these chars:
* http://www.fileformat.info/info/unicode/char/2603/index.htm (snowman)
* http://www.fileformat.info/info/unicode/char/26c4/index.htm (snowman without snow)
* http://www.fileformat.info/info/unicode/char/1f638/index.htm (grinning cat face with smiling eyes)
*
* Looks like ncurses is NOT able to display second and third char
* (only the first one is OK...)
*/
#include <ncurses.h>
#include <stdio.h>
#include <locale.h>
int
main (int argc, char *argv[])
{
WINDOW *stdscr;
char buffer[] = {
'<',
0xE2, 0x98, 0x83, // U+2603 : snowman: OK
0xE2, 0x9B, 0x84, // U+26C4 : snowman without snow: ERROR (space displayed)
0xF0, 0x9F, 0x98, 0xB8, // U+1F638: grinning cat face: ERROR (space displayed)
'>',
'\0' };
setlocale (LC_ALL, "");
stdscr = initscr ();
mvwprintw (stdscr, 0, 0, buffer);
getch ();
endwin ();
/* output the buffer outside of ncurses */
printf("%s\n",buffer);
return 0;
}
最终的 printf 输出了所有字符,如我所期望的 "<☃⛄>"(因为我使用了正确配置的语言环境、终端仿真器和适当的字体组合)。然而,应该使用 ncurses 函数输出文本的第一部分无法正常工作。您只能看到第一个字符(雪人),而其他两个字符只会被渲染为空格。"<☃ >"。
我阅读了许多谷歌帖子,说我还需要包含
#define _XOPEN_SOURCE_EXTENDED 1
我在源代码中进行了更改,但对我来说这并没有改变输出结果。
那么,我是在做一些极其愚蠢的事情吗?还是当使用Unicode空间的某些部分时,ncurses出现了故障?
glibc
现在已经更新到Unicode 7.0 :) - MestreLion