【发布时间】:2018-11-18 21:56:13
【问题描述】:
尝试在 ncurses 下获得对 UTF8 的全面支持。我构建了具有广泛字符支持的 ncurses 5.9。如果我有一个 utf8 字符串,如下所示:
D0 9D D0 BE D0 B2 D1 8B D0 B9 将在普通控制台中使用 printf 输出 Новый。如果我启动 ncurses 并使用 waddstr,我只会得到一些字符,如:?~]ов?~Kй。为什么它不起作用?嵌入的转义序列 ~] 和 ~K 有什么意义?
我包括宽版本的标头并与内置的宽库链接。
这是使用 open watcom(静态链接)构建的,事实证明 OW 始终使用“C”语言环境,因此重新构建了删除 HAVE_LOCALE_H 的库(在这种情况下允许 ncurses 从环境变量中提取信息@ 987654326@)。所以现在摆脱了~] 和~K 但仍然得到? ов? й(现在\n 换行不起作用)。
所以这变成了两个额外的问题:
1) ncurses 对 c 库有什么要求? (显然 ncurses 可以很好地处理一些多字节字符,但是这两个仍然有问题)
2) 为什么newline 字符停止工作?
TIA!!
【问题讨论】:
-
答案是 ncurses 中的一个错误。如果
HAVE_WCTOB未定义但HAVE_WCTOMB是(最好是缺少#error,因为在这种情况下结果未定义),那么当_nc_is_charable在charable.c中被调用时,它调用_nc_to_char,然后使用@ 987654338@ 函数并假设返回的 mb 字符串将有一个z-term但它可能没有(也没有),所以strlen检查是不好的。 -
这东西什么时候可以让我添加最终答案?