繁体   English   中英

在ncurses中打印长unicode

[英]Print long unicode in ncurses

我需要在终端上为我的游戏打印一些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-information。 如果你的语言环境信息太旧, wcwidth返回一个负值,告诉ncurses该字符是非打印的。 在这种情况下,ncurses将显示一个空白。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM