在ncurses中打印盲文字符

时间:2017-08-16 10:21:54

标签: 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 个答案:

答案 0 :(得分:2)

通过一些实验,我发现可能出现的问题:

  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,您应该完成。