c - 在 ncurses 中打印长 unicode

标签 c unicode 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 编译/链接)- 参见屏幕截图:

enter image description here

根据 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/

相关文章:

c - 为什么要使用pthread_exit?

c - bit twiddling 是对嵌入式工程师的一个很好的考验

r - ggplot : some Unicode shapes working while others do not

c++ - 诅咒填充 block

c - 矩阵作为二维指针 C

c - 阿托到底怎么了?

java - Java 中的 "surrogate pair"是什么?

unicode - ColdFusion cfmail 主题行中的特殊字符

c - Ncurses:从用户读取整数并存储为变量

c - 如何在 C 中使用 setfillstyle() 和 textcolor()