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

时间:2011-01-16 01:03:55

标签: c utf-8 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 ...

#include <locale.h>

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

ncurses包括:

#include <ncurses.h> 

编译:

(编辑:添加了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?)?!救命!

4 个答案:

答案 0 :(得分:19)

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

尝试使用-lncursesw代替-lncurses

此外,对于区域设置,请尝试调用setlocale(LC_ALL, "")

答案 1 :(得分:2)

这是 2个字符:

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

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

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

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

答案 2 :(得分:1)

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);
}

完全没有经过测试,但应该有效。

答案 3 :(得分:1)

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