いたさんのブログ

rails to Niigata

Ruby on RailsアプリケーションをBDDで開発する際の標準となった感のあるCucumberとRSpecですが、フィーチャやスペックを日本語で記述することになります。
Mac OS XやLinuxでは全く問題にならないのですが、Windowsの場合、UTF-8の出力をコンソールに表示する事が問題となります。
NetBeansを使えば、出力ウィンドウでUTF-8を表示可能ですが、特定のフィーチャを指定して実行する機能などがないため、実用てきではありません。

コードページ変更による方法


コマンドプロンプトのコードページを65001(UTF-8)にする方法もあるようですが、日本語表示フォントの設定がうまく行かなかったり、コマンド入力が正しく実行されなかったりして、手元の環境では使用できませんでした。

何度か試しているうちに気がついたのが、設定の順序です。次の方法だとうまく行くようです。

  1. 日本語フォントを明示的に設定する
  2. コードページを変更する

1は、コマンドプロンプトのウィンドウの左上をクリックして、「プロパティ」を選択し、「フォント」の設定を「MSゴシック」に変更します。

2は、コマンドプロンプトでchcp 65001と入力して、65001(UTF-8)に変更します。

win32consoleをハックする方法

Windows上で、RSpecや Cucumberのカラー出力をしようとするとwin32consoleをインストールするようにアドバイスされます。

このモジュール自体は、日本語に対応している訳ではなさそうですが、Win32::Console::ANSI::IO#_convをハックする事で、出力文字をShift-JISに強制変更させます。


require "Win32/Console"
require "kconv"
....
module Win32
  module Console
    module ANSI
      class IO < IO
....
        def _conv(s)
          if @concealed
            s.gsub!( /\S/,' ')
          elsif @conv
            if EncodeOk
              from_to(s, cpANSI, cpOEM)
            elsif @@cp == 'cp932cp932'
              s = s.tosjis
            elsif @@cp == 'cp1252cp850'      # WinLatin1 --> DOSLatin1
....
      end
    end
  end
end

ただし、この方法はコンソールに出力する場合のみコード変換を行うため、リダイレクトを行う場合にはうまく行きません。ZenTestのautotest(RSpecの場合のautospec)は内部でリダイレクトを行っているため、うまく行きませんでした。

Published on 08/09/2009 at 14:43 under . タグ , , , , , ,

Powered by Typo – Thème Frédéric de Villamil | Photo Glenn