• このエントリーをはてなブックマークに追加

RSpecで Windows-31Jのエンコードを扱うときにハマったので、作業メモ。

スポンサードリンク

Rubyファイルのエンコードについて

Rubyでは、ファイルのエンコードを判定するために、 ファイル冒頭のマジックコメントを利用している。


UTF-8の場合
# coding: utf-8

Windows-31Jの場合
# coding: Windows-31J

エンコードのことなる関係でRubyを利用するときは注意が必要。

Rubyでは、文字列のエンコードを変換するために、以下のメソッドがある。


# 戻り値として変更
str.encode!("UTF-8")

# 上書き変更
str.encode!("UTF-8")

# エンコードを調べる
str.encoding

RSpecでのエンコード

RSpecで文字列を比較するときは、当然文字コードが期待値と結果で同一な必要がある。

specファイルもテスト対象も同一の文字コードで記述すれば比較は問題ない。

しかし、普段Emacsに結果を表示していて、その表示がUTF-8でないと文字化けしてしまう。

しかたがないので、以下のようにした。

  • specファイルは UTF-8
  • テスト対象ファイルは Windows-31J
  • specからテスト対象を呼び出すときと、結果の比較で encodeメソッドを利用する。
it "日本語" do
  line = "SCENARIO_NAME = \'こんにちは\'".encode!("Windows-31J")
  @perser.parse(line, @regexp).should == "こんにちは".encode!("Windows-31J")
end