読者です 読者をやめる 読者になる 読者になる

ひだまりソケットは壊れない

ソフトウェア開発に関する話を書きます。 最近は主に Android アプリ、Windows アプリ (UWP アプリ)、Java 関係です。

まじめなことを書くつもりでやっています。 適当なことは 「一角獣は夜に啼く」 に書いています。

Curses モジュールを使って UTF-8 エンコーディングの文字列を表示しようとすると文字化けしてしまう問題 (Ruby)

Ruby

RubyCurses モジュール を使って以下のような日本語を表示させるプログラムを実行させたところ、端末上には文字化けした状態で表示されてしまいました。

#! ruby -EUTF-8
# coding: UTF-8

require 'curses'

Curses.init_screen
begin
  win = Curses.stdscr.subwin(5,30,2,2)
  win.box(?|,?-,?*)
  win.setpos(2,2)
  win.addstr("subwindow です")
  win.refresh
  Curses.getch
ensure
  Curses.close_screen
end

環境

  • Ubuntu 10.04 (Desktop 版)
  • Ruby 1.9.3-p125 (rvm でインストール)
  • curses ライブラリ周りは Ubuntu のデフォルトの状態のまま

解決方法

I don't know the exact steps, but I've heard people say that they had to recompile Ruby using libncursesw5-dev to get Unicode to work as expected.

ruby - How to display unicode characters using curses? - Stack Overflow

libncursesw5-dev パッケージを apt-get でインストールした後に、Ruby をビルドしなおしたところ、UTF-8 文字列もちゃんと表示できるようになりました。

# libncursesw5-dev のインストール
$ apt-get install libncursesw5-dev

# ruby の再ビルド
$ rvm reinstall ruby-1.9.3