我需要在终端上为我的游戏打印一些 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 编译/链接)- 参见屏幕截图:
根据 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/