我需要在终端上为我的游戏打印一些Unicode字符,有些像这样,\U0001F0A1,还有我的代码

#include <curses.h>
#include <locale.h>
int main(){
    setlocale(LC_ALL, "");
    initscr();
    printw("\U0001F0A1");
    getch();
    endwin();
    return 0;
}

所有的打印输出都是空白屏幕,但当我尝试使用printf时,它可以正常打印出卡片。

最佳答案

可能的问题是:ncurses使用wcwidth来确定字符的宽度,而printf不进行检查。计算机上的区域设置信息太旧,无法给出正确的结果。
检查我的Debian测试,这是可行的(使用问题中给出的示例程序,编译/链接NCurseSW)-请参见屏幕截图:
c - 在ncurses中打印长的unicode-LMLPHP
根据fileformat-info,这来自Unicode 6.0(2010)。取决于你使用的系统,例如debian或ubuntu,这可能是“最新的”。
ncurses需要正确的wcwidth区域设置信息,而printf不使用wcwidth信息。如果您的语言环境信息太旧,wcwidth返回一个负值,告诉ncurses该字符是非打印的。在这种情况下,ncurses将显示空白。

关于c - 在ncurses中打印长的unicode,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36645187/

10-13 06:28