内容

更新日: 2005/11/15
バージョン: ncurses-5.4

■ 概要
■ ソース

TOP

ncursesでUTF-8表示

UTF-8対応版なら先頭でsetlocale()しておくだけで普通に表示できる。 ただし(Fedora Coreの場合は)リンク時に「 -lncurses ではなくて -lncursesw をリンクすること」。

UTF-8非対応版の場合は面倒でもmbstowcs()でワイド文字に直してから addwstr() を使う必要がある。

概要

ソース

hjklで移動、qで終了

UTF-8対応版

#include <ncurses.h> // -lncurses ではなくて -lncursesw をリンクすること
#include <locale.h> // setlocale()

int main()
{
    setlocale( LC_ALL, "" );

    initscr();
    int x = 0;
    int y = 0;
    for(;;){
        clear();
        move( y, x );
        addstr( "UTF-8対応" );
        refresh();
        switch( getch() ){
            case 'q' : goto EXIT_FOR;
            case 'k': --y; break;
            case 'j': ++y; break;
            case 'l': ++x; break;
            case 'h': --x; break;
        }
    }

EXIT_FOR:
    endwin();
    return 0;
}


UTF-8非対応版
#include <ncursesw/ncurses.h> // addwstr(), -lncursesw
#include <stdlib.h>  //  mbstowcs()
#include <locale.h> // setlocale()

#define MAX_STR 256

void addutf8str( const char* str )
{
    wchar_t dst[ MAX_STR ];
    if( mbstowcs( dst, str, MAX_STR ) ) addwstr( dst );
}

int main()
{
    setlocale( LC_ALL, "" );

    initscr();
    int x = 0;
    int y = 0;
    for(;;){
        clear();
        move( y, x );
        addutf8str( "UTF-8非対応" );
        refresh();
        switch( getch() ){
            case 'q' : goto EXIT_FOR;
            case 'k': --y; break;
            case 'j': ++y; break;
            case 'l': ++x; break;
            case 'h': --x; break;
        }
    }

EXIT_FOR:
    endwin();
    return 0;
}