将 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 <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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
宽字符支持由 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, "")
这不是 2 个字符:
您正在尝试使用指针初始化
wchar_t
(整数)值,这会导致编译器出错。要么使用:要么
This is not 2 characters:
You're trying to initialize
wchar_t
(integer) values with pointers, which should result in an error from the compiler. Either use:or
cchar_t
定义为:因此您可以尝试:
未经过任何测试,但应该可以工作。
cchar_t
is defined as:so you might try:
not at all tested, but should work.
您是否在包含 ncurses 标头之前定义了
_XOPEN_SOURCE_EXTENDED
?Did you define
_XOPEN_SOURCE_EXTENDED
before including the ncurses header?