我需要在终端上为我的游戏打印一些unicode字符,有些像这样,\U0001F0A1
和我的代码
#include <curses.h>
#include <locale.h>
int main(){
setlocale(LC_ALL, "");
initscr();
printw("\U0001F0A1");
getch();
endwin();
return 0;
}
并且所有打印出来的都是空白屏幕,但是当我尝试使用printf时,它可以正常打印出来。
答案 0 :(得分:3)
可能的问题是:ncurses使用wcwidth
来确定角色的宽度,printf
不检查。您计算机上的区域设置信息太旧,无法提供正确的结果。
使用我的Debian测试进行检查,这是有效的(使用问题中给出的示例程序,使用ncursesw编译/链接) - 请参见屏幕截图:
根据fileformat-info,这来自Unicode 6.0(2010)。取决于您使用的系统,例如Debian或Ubuntu,可能是&#34;最近&#34;。
ncurses需要正确的wcwidth
语言环境信息,而printf
不使用wcwidth-information。如果您的语言环境信息太旧,wcwidth
会返回一个负值,告诉ncurses该字符是非打印的。在这种情况下,ncurses将显示一个空白。