2017-08-16 12 views
4

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; 
} 

出力は次のようになります。

すべての文字が正しくI出力を行う方法
?~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を試してみましたが、addstrprintwと同じ出力を生成します。

私は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

だから、 'stdio'でも使えますか?いくつかのエンコーディングの問題のように見えますが、ncursesのマルチバイト文字の処理にはバグかもしれません。 –

+0

'stdio'で動作するようですが、ncursesのバージョン6.0.20160910を実行しています –

+1

おそらくこれが役立つでしょう:https://stackoverflow.com/a/6249265/8051589? –

答えて

2

を、私はおそらく間違っている何が見つかりました:

  1. あなたのプログラムは、デフォルトでCロケールを使用しています。これは、ASCIIエンコーディングを想定しています。 stdioでマルチバイト文字を出力すると問題はありません。なぜならこれらの関数はのようにという文字列をコンソールに出力するだけですからです。それでも文字化け出力、システムのを取得する場合

    #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. :それはバイト(正確に位置決めするための重要な)文字を作るどのように多くのようなものなどを知ることができるので、しかし、ncursesは、実際には、次のようにプログラムを変更して、ロケールを使用していますlibncursesはユニコードを処理しません。その場合は、ncursesの代わりにncurseswをリンクしてください。