NCURSES表单字段输入Unicode字符的问题求助
NCURSES表单字段Unicode输入问题
需求:通过Ctrl快捷键输入少量Unicode字符,例如按下Ctrl+a时输入U+00E1(á,即\u00E1)。
相关代码片段:
/* Loop through to get user requests */ while((ch = getch()) != KEY_F(1))//F1 for now { switch(ch) { default: /* If this is a normal character, it gets */ /* Printed */ if (ch == ctrl('a')) { /*FIELD *mycurrentfield = current_field(my_form); int my_index = field_index(mycurrentfield); set_field_buffer(mycurrentfield, my_index, "\u00E1");*/ form_driver_w(my_form, OK, '\u00E1'); } else { form_driver(my_form, ch); } break; } }
问题现象
- 编译时触发警告:
src/window.cpp:84:38: warning: multi-character character constant [-Wmultichar] - 运行时目标Unicode字符显示为方块;输入普通字符(如#)可正常工作,说明问题仅出在
form_driver系列函数处理Unicode的环节。
已尝试的操作
- 使用
-lncursesw和-lformsw编译(启用宽字符支持); - 普通
print、mvprint函数可正常打印Unicode字符,已包含<locale.h>并在initscr()前调用setlocale(LC_ALL, ""); - 替换
form_driver_w为form_driver(my_form, '\u00E1')仍出现相同警告,已定义#define _XOPEN_SOURCE_EXTENDED 1; - 尝试用
set_field_buffer作为替代方案,但仅能在第一个字段高亮时将Unicode字符置于位置0,且无法编辑字段内指定索引位置。
疑问
NCURSES打印函数可支持Unicode,但表单字段是否无对应函数支持Unicode输入?
内容的提问来源于stack exchange,提问作者II_Paulus_II
相关产品推荐
相关产品推荐

