将Unicode / UTF8字符添加到C中的ncurses显示中

我正在尝试将wchar_t Unicode字符添加到C中的ncurses显示中。

我有一个数组:

wchar_t characters[]={L'\uE030', L'\uE029'}; // containing 2 thai letters, for example 

之后我尝试将数组中的wchar_t添加到ncurses显示中:

 add_wch(characters[0]); 

要提供更多信息,使用ASCII执行此操作正常,使用:

 char characters[]={'A', 'B'}; // and later... addch(characters[0]); 

要设置区域设置,我添加包含…

 #include  // in main() setlocale(LC_CTYPE,"C-UTF-8"); 

ncurses包括:

 #include  

编译:

(编辑:添加了c99标准,用于支持通用字符名称。)

 gcc -o ncursesutf8 ncursesutf8.c -lm -lncurses -Wall -std=c99 

我得到以下编译警告(当然可执行文件将失败):

 ncursesutf8.c:48: warning: implicit declaration of function 'add_wch' 

我已经尝试过使用addch ,这似乎是宏用于wchar_t,但是当我这样做时,Unicode字符不会显示,而是显示为ASCII字符而不是。

有什么想法吗?

我正在使用OS X Snow Leopard,10.6.6

编辑:删除了wchar_t []赋值的错误,使用L'\u0E30'代替L"\u0E30"等。我还更新了编译器设置以使用C99(添加通用字符名称支持)。 这两个变化都无法解决问题。

仍然没有答案,有谁知道如何做Unicode ncurses addchar (add_wchar?)?! 救命!

广泛的角色支持由ncursesw处理。 根据您的发行版,ncurses可能会或可能不会指向那里(看似不在您的发行版中)。

尝试使用-lncursesw而不是-lncurses

此外,对于语言环境,请尝试调用setlocale(LC_ALL, "")

不是 2个字符:

 wchar_t characters[]={L"\uE030", L"\uE029"}; 

您正在尝试使用指针初始化wchar_t (整数)值,这会导致编译器出错。 使用:

 wchar_t characters[]={L'\uE030', L'\uE029'}; 

要么

 wchar_t characters[]=L"\uE030\uE029"; 

cchar_t定义为:

 typedef struct { attr_t attr; wchar_t chars[CCHARW_MAX]; } cchar_t; 

所以你可以尝试:

 int add_wchar(int c) { cchar_t t = { 0, // .attr {c, 0} // not sure how .chars works, so best guess }; return add_wch(t); } 

根本没有测试,但应该工作。

在包含ncurses标头之前,您是否定义了_XOPEN_SOURCE_EXTENDED