在 C 中打印 Unicode 符号

Printing a Unicode Symbol in C

我正在尝试使用 C 在 linux 终端中打印一个 unicode 星号字符 (0x2605)。我遵循了网站上其他答案建议的语法,但是我'我没有得到输出:

#include <stdio.h>
#include <wchar.h>

int main(){

    wchar_t star = 0x2605;
    wprintf(L"%c\n", star);

    return 0;
}

如果有任何建议,我将不胜感激,尤其是如何使用 ncurses 库进行这项工作。

两个问题:首先,一个wchar_t必须用%lc格式打印,而不是%c。第二个是除非你调用 setlocale 否则字符集设置不正确,你可能会得到 ? 而不是你的星星。不过,以下代码似乎有效:

#include <stdio.h>
#include <wchar.h>
#include <locale.h>

int main() {
    setlocale(LC_CTYPE, "");
    wchar_t star = 0x2605;
    wprintf(L"%lc\n", star);
}

ncursesjust initialize the locale before the call to initscr

无论您使用的是 stdio 还是 ncurses,都必须初始化语言环境,如 ncurses manual 中所述。否则,UTF-8 等多字节编码将不起作用。

wprintw 不一定了解 wchar_t(尽管它可能使用相同的底层 printf,这取决于平台和配置)。

使用 ncurses,您可以通过以下任一方式显示 wchar_t

  • 将其存储在wchar_t的数组中,并使用waddwstr,或
  • 将其存储在 cchar_t 结构中(使用 setcchar),并使用 wadd_wch 作为参数,或
  • wchar_t 转换为多字节字符串,并使用 waddstr