【发布时间】:2011-06-09 20:16:05
【问题描述】:
我正在尝试将 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?) 吗?!帮助!
【问题讨论】:
-
另外请注意,除了
""之外,您不应该将任何字符串传递给setlocale。传递""会导致获取配置/系统语言环境,基于任何现代系统,它应该是UTF-8。像"C-UTF-8"这样的名字是不可移植的。