在 ncurses 中打印盲文字符
Print braille characters in ncurses
我试图在 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 [ \ ] ^ _
⠠⠡⠢⠣⠤⠥⠦⠧⠨⠩⠪⠫⠬⠭⠮⠯
⠰⠱⠲⠳⠴⠵⠶⠷⠸⠹⠺⠻⠼⠽⠾⠿
通过一些实验,我发现可能是错误的地方:
您的程序默认使用 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 ...
如果你仍然得到乱码输出,你的系统 libncurses
不处理 unicode。在那种情况下,link ncursesw
而不是 ncurses
你应该完成了。
我试图在 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 [ \ ] ^ _
⠠⠡⠢⠣⠤⠥⠦⠧⠨⠩⠪⠫⠬⠭⠮⠯
⠰⠱⠲⠳⠴⠵⠶⠷⠸⠹⠺⠻⠼⠽⠾⠿
通过一些实验,我发现可能是错误的地方:
您的程序默认使用
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 ...
如果你仍然得到乱码输出,你的系统
libncurses
不处理 unicode。在那种情况下,linkncursesw
而不是ncurses
你应该完成了。