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

将Unicode/UTF8字符添加到C中的ncurses显示,c,utf-8,ncurses,C,Utf 8,Ncurses,我正在尝试将wchar\u 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',

我正在尝试将wchar\u 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

#include <locale.h>

// in main()
setlocale(LC_CTYPE,"C-UTF-8");
我得到以下编译警告(当然可执行文件将失败):

我尝试过使用
addch
,它似乎是宏化的,用于处理wchar\t,但当我这样做时,Unicode字符不会显示,而是显示为ASCII字符

有什么想法吗

我正在使用OSX雪豹,10.6.6

编辑:删除了使用
L'\u0E30'
而不是
L“\u0E30”
等的
wchar\u t[]赋值上的错误。
我还更新了编译器设置以使用C99(添加通用字符名支持)。这两种更改都不能解决问题


仍然没有答案,有人知道如何使用Unicode ncurses
addchar
(add\u wchar?)吗?!救命啊

这不是两个字符:

wchar_t characters[]={L"\uE030", L"\uE029"};
您试图用指针初始化
wchar\u t
(整数)值,这将导致编译器出错。或使用:

wchar_t characters[]={L'\uE030', L'\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);
}

完全没有经过测试,但应该可以工作。

宽字符支持由ncursesw处理。取决于您的发行版,ncurses可能指向那里,也可能不指向那里(似乎不在您的发行版中)

尝试使用
-lncursesw
而不是
-lncurses


另外,对于区域设置,请尝试调用
setlocale(LC\u ALL,”)

在包含ncurses标头之前是否定义了
\u XOPEN\u SOURCE\u EXTENDED

还请注意,除了
之外,不应将任何字符串传递给
setlocale
。传递
将获得配置的/system区域设置,该区域设置应为基于任何现代系统的UTF-8。像
“C-UTF-8”
这样的名称是不可移植的。感谢您提供的提示,但这并不能解决问题,请参阅上面我的编辑。有什么想法吗?@R。。。你有没有可能回答这个问题?我试试看,希望你猜对;)好吧,这不起作用,CCHARW_MAX是未定义的,我真的不知道你是怎么想到这个的,一些解释会有帮助的。我还必须将
cchar\t
struct添加到源代码中,按照你的说法,他们推断它已经定义(大概在ncurses中)。等等,你有添加wch吗?我的文档中有它,但它显然没有在我的课程中定义。我有
add_wch
,但它似乎不起作用(终端输出是
代替我正在使用的泰语unicode字符,否则显示ok,例如,如果我直接将它们输入到终端提示符中。)好吧,我被难倒了。(你帖子中的警告似乎暗示你没有
add_wch
,你还得到了吗?)也许可以发布/链接你的ncurses.h?我最后是用Lisp而不是C.:)另外,请注意,
setlocale
的调用必须在
initscr()之前。
wchar_t characters[]={L'\uE030', L'\uE029'};
wchar_t characters[]=L"\uE030\uE029";
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);
}