2012年10月25日木曜日

Windows環境でのRuby on railsコンソールの日本語表示

Windows のコマンドプロンプトで、Ruby on rails のコンソールを動かすと、日本語の表示でエラーが発生してしまう。

具体的には、下記クラスのputsメソッドを実行すると、
class Jpmsg
  def self.prt
    puts "テスト"
  end
end
下記のようなエラーが発生する。
irb(main):001:0> Jpmsg.prt
SyntaxError: E:/Sites/mytest/app/models/jpmsg.rb:3: invalid multibyte char (US-A
SCII)
E:/Sites/mytest/app/models/jpmsg.rb:3: invalid multibyte char (US-ASCII)
E:/Sites/mytest/app/models/jpmsg.rb:3: syntax error, unexpected $end, expecting
keyword_end
    puts "���������"
            ^
(以下略)
Rubyでは内部的にはUTF-8を利用している。
一方で、WindowsのコマンドプロントはShift-JIS。

コマンドプロントの文字コードは、「chcp 65001」と入力することで変更できるのだが、変更後は自動的に欧文フォントになってしまう。

下記のブログでは、レジストリの値を変更して、UTF-8で日本語フォントを利用する方法が紹介されているものの、自分の環境ではうまくいかなかった。

コンソール(cmd.exe)の文字コードを UTF-8 に

試行錯誤した結果、コマンドプロンプトの問題ではなく、ソースコードで利用する文字コードを明示的に指定しなければならないという問題のようである。

下記のように、文字コードを指定する一文を追加したことでちゃんと表示されるようになった。
# coding: utf-8
class Jpmsg
  def self.prt
    puts "テスト"
  end
end
irb(main):002:0> Jpmsg.prt
テスト
=> nil
下記のブログが参考になった。情報公開に感謝。

OSとRubyスクリプトの文字コードが異なる場合の対策
http://pgnote.net/?p=211

0 件のコメント:

コメントを投稿