先日の東京・関東Rubyist忘年会の席で、「UTF-8で日本語を記述したRspecをwindowsで動かすと文字化けして困る」という話があった。 で、「それcocotでできるよ」と言おうとしたのだけど暫く使ってなかったのでとっさに"cocot"の名前が出てこなかった。
cocotは「端末(tty)とプロセスの間に割り込んで、文字コード変換を行うツール」。だから、cocotの下でシェルを動かしてしまえばあとは意識せずにコード変換してくれる。 シェル丸ごとだと今度は標準コマンドの出力が化けるかも知れないけど、だったらalias spec="cocot -p UTF-8 spec"とかすればいい。
忘年会での質問者です。さっそくのお答え、ありがとうございます。
教えていただいた cocotを試してみたんですが、今のところうまく行ってません・・・。
Yuguiさんの想定されている環境って、Rubyとか Rubygemsとか Rakeとかを全部 Cygwin側でインストールしているという理解で良いんでしょうか?
現在こちらの環境では全て Win32版を使用しているので、--colourを付けると
rake spec
の結果が標準出力ではなくて win32consoleのほうに持って行かれてしまい、おそらく RSpecの実行結果が cocotにぜんぜん渡っていない状態になってしまっています。
結果として、コンソールには肝心の一番見たいものがまったく表示されません。
ちなみに、同様の理由で、Cygwinのシェルから実行しても、chcp 65001 しても、specの出力結果を nkf にパイプで食わせても、やっぱり何も表示されなくなります。つまり、「Win32版の RSpecは色をつけると win32consoleに出力したがるし、win32consoleは標準出力じゃないから」です。
ということで、やっぱり全部 Cygwinで Ruby環境を作るしかないのかなぁ、と思っているのですが、いかがでしょうか?。
以上、ひと様のブログで長文コメント、失礼いたしました。