c - 在 ncurses 中打印盲文字符

标签 c ncurses braille

我试图在 ncurses 中打印盲文字符。

这是我的代码:

#include <ncurses.h>

char *str = 
    " ⠁⠂⠃⠄⠅⠆⠇⠈⠉⠊⠋⠌⠍⠎⠏\n"
    "⠐⠑⠒⠓⠔⠕⠖⠗⠘⠙⠚⠛⠜⠝⠞⠟\n"
    "⠠⠡⠢⠣⠤⠥⠦⠧⠨⠩⠪⠫⠬⠭⠮⠯\n"
    "⠰⠱⠲⠳⠴⠵⠶⠷⠸⠹⠺⠻⠼⠽⠾⠿\n";


int main(int argc, const char *argv[]) {
    initscr();
    printw("%s", str);
    getch();
    printf("%s", curses_version());
    endwin();
    printf("%s", str);
    return 0;
}

输出是:

 ?~A?~B?~C?~D?~E?~F?~G?~H?~I?~J?~K?~L?~M?~N?~O
?~P?~Q?~R?~S?~T?~U?~V?~W?~X?~Y?~Z?~[?~\?~]?~^?~_
⠠⠡⠢⠣⠤⠥⠦⠧⠨⠩⠪⠫⠬⠭⠮⠯
⠰⠱⠲⠳⠴⠵⠶⠷⠸⠹⠺⠻⠼⠽⠾⠿

如何正确输出所有字符?

更新:我还尝试了 printf,它似乎有效,addstr 产生与 printw 相同的输出。

如果我使用 setlocale(LC_ALL, ""); 更改语言环境,我会得到输出:

  A B C D E F G H I J K L M N O
 P Q R S T U V W X Y Z [ \ ] ^ _
⠠⠡⠢⠣⠤⠥⠦⠧⠨⠩⠪⠫⠬⠭⠮⠯
⠰⠱⠲⠳⠴⠵⠶⠷⠸⠹⠺⠻⠼⠽⠾⠿

最佳答案

通过一些实验,我发现可能是错误的:

  1. 您的程序默认使用 C 语言环境。这假定 ASCII 编码。当您使用 stdio 输出多字节字符时,这不是问题,因为这些函数只是将字节按原样 传送到控制台。但是 ncurses 实际上使用语言环境,所以它可以知道有多少字节构成一个字符(对于精确定位很重要)等。按如下方式更改您的程序:

    #include <curses.h>
    #include <locale.h>
    
    int main(int argc, char *argv[])
    {
        // initialize locale to system's default:
        setlocale(LC_ALL, "");
    
        // now init and use curses ...
    
  2. 如果您仍然得到乱码输出,则说明您系统的 libncurses 不处理 unicode。在这种情况下,链接 ncursesw 而不是 ncurses 就应该完成了。

关于c - 在 ncurses 中打印盲文字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45710987/

相关文章:

c - 我不知道为什么我的 C 代码总是返回 128

android - 使用 NDK 显示轮廓的图像处理

javascript - 如何获取一个Unicode字符名对应的字符?

accessibility - 盲人网站?

c - 使用堆栈和二叉树c构建表达式树

c++ - Eclipse|Netbeans中C/C++远程系统开发

c - 使用 execlp() 遇到麻烦

c - ncurses 不捕获鼠标移动,但终端是

c - 如何在打开 `raw()` 设置的情况下终止 ncurses 程序?

arrays - 如何在 matlab 中对子矩阵进行 "iterate"