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

发布于 2024-10-12 08:59:42 字数 1263 浏览 4 评论 0原文

我正在尝试将 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 <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?) ?!帮助!

I'm attempting to add wchar_t Unicode characters to an ncurses display in C.

I have an array:

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

And I later try to add a wchar_t from the array to the ncurses display with:

add_wch(characters[0]);

To provide a bit more info, doing this with ASCII works ok, using:

char characters[]={'A', 'B'};

// and later...

addch(characters[0]);

To setup the locale, I add the include...

#include <locale.h>

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

The ncurses include is:

#include <ncurses.h> 

Compiling with :

(edit: added c99 standard, for universal char name support.)

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

I get the following compilation warning (of course the executable will fail):

ncursesutf8.c:48: warning: implicit declaration of function ‘add_wch’

I've tried just using addch which appears to be macro'ed to work with wchar_t but when I do that the Unicode chars do not show up, instead they show as ASCII chars instead.

Any thoughts?

I am using OS X Snow Leopard, 10.6.6

Edit: removed error on wchar_t [] assignment to use L'\u0E30' instead of L"\u0E30" etc.
I've also updated the compiler settings to use C99 (to add universal char name support). both changes do not fix the problem.

Still no answers on this, does anyone know how to do Unicode ncurses addchar (add_wchar?) ?! Help!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

恍梦境° 2024-10-19 08:59:42

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

尝试使用 -lncursesw 而不是 -lncurses

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

The wide character support is handled by ncursesw. Depending on your distro, ncurses may or may not point there (seemingly not in yours).

Try using -lncursesw instead of -lncurses.

Also, for the locale, try calling setlocale(LC_ALL, "")

蓝眼泪 2024-10-19 08:59:42

不是 2 个字符:

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

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

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

要么

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

This is not 2 characters:

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

You're trying to initialize wchar_t (integer) values with pointers, which should result in an error from the compiler. Either use:

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

or

wchar_t characters[]=L"\uE030\uE029";
攀登最高峰 2024-10-19 08:59:42

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

未经过任何测试,但应该可以工作。

cchar_t is defined as:

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

so you might try:

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

not at all tested, but should work.

没有心的人 2024-10-19 08:59:42

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

Did you define _XOPEN_SOURCE_EXTENDED before including the ncurses header?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文