NCURSESW - 无法使用 addwstr 函数打印标准 ASCII 之外的 unicode 字符

问题描述 投票:0回答:1

我正在尝试使用 ncursesw 库制作一个简单的游戏,我基本上是一个完全的菜鸟。我让这个库开始工作,现在我可以用它成功编译程序了。现在我试图使用这个库打印出 unicode 字符,但我无法让它们显示。我没有足够的诅咒经验来了解自己发生了什么,所以我真的很感激任何关于这个问题的帮助。

我构建了一个示例程序,它使用 addwstr 函数打印出从 0 到 1023 的所有字符,但控制台的可见输出在 127 点之后立即停止(DEL - 表示为“^?”),除了一些奇怪的六边形的重复之外中间有一个问号,稍后进行一些迭代。

#define _XOPEN_SOURCE 700
#include <locale.h>
#include <ncursesw/curses.h>

int main(void)
{

    setlocale(LC_ALL, "en_US.UFT-8");

    wchar_t string[2];
    string[0] = (wchar_t)0;
    string[1] = (wchar_t)0x0;

    initscr(); //init ncurses mode

    for(int i = 0; i < 64; i++) {
      for(int j = 0; j < 64; j++) {
         addwstr(string);
         string[0]++;
      }
      addwstr(L"\n");
   }

   refresh(); //display updates to buffer
   getch();

   endwin();
   return 0;
}

我正在使用 i3 在最小的 Debian 安装上测试这一切。我已经在 xterm 和 alacritty 上运行了该程序,但得到了与上述相同的结果。如果有人知道我的代码有什么问题,请分享您的想法。

我的最终目标是能够为我的游戏打印 U+2588 字符。我还尝试使用 WACS_BLOCK 宏,但这只在屏幕上添加了一个“#”。


所以我解决了我自己的问题...... 我所要做的就是在 setlocale 函数中正确拼写 UTF-8。我通常会删除它,但我觉得这可以帮助很多人尝试建立一个基本的 ncursesw 程序,因为这个库上几乎没有任何易于理解的文档。我花了大约 3 个小时来翻阅 ncurses 手册页和随机的 2000 年代网站才能使其正常工作

c linux unicode ncurses widechar
1个回答
1
投票

所以我解决了我自己的问题...我所要做的就是在 setlocale 函数中正确拼写 UTF-8 。我通常会删除它,但我觉得这可以帮助很多人尝试建立一个基本的 ncursesw 程序,因为这个库上几乎没有任何易于理解的文档。我花了大约 3 个小时来翻阅 ncurses 手册页和随机的 2000 年代网站才能使其正常工作

© www.soinside.com 2019 - 2024. All rights reserved.