$KCODE is no longer effective
M17N対応の施されたRuby1.9系は、$KCODEは使わない。ということらしい。
irb(main):001:0> $KCODE (irb):1: warning: variable $KCODE is no longer effective => nil
では、スクリプトのエンコーディングを指定するには代わりに何を使えば良いのだろう。
Ruby1.9はM17N対応にJavaや.NET等が使用しているUCS(Universal Character Set)Normalization方式※ではなく、CSI(Code Set Independent)方式を採用しているため、メモリを覗いてエンコーディングを決め打ちすることができないため、なんらかの方法で明示的にスクリプトのエンコーディングを与える必要がある。
1. マジックコメント
2. コマンドラインオプション
3. Encoding.default_internal
と幾つか方法はあるようだが、$KCODEと同じ感覚で使えるのはマジックコメントで指定する方法だろうか。
#coding: euc-jp #coding: shift_jis #coding: utf-8
等とそれぞれの名称でコメントとして記述すると、以降の文字列はその指定したエンコーディング名で記述されていることとして処理される。
うーん、これがベストなのだろうか。
今日参考にさせて頂いたURL:
Rubyist Magazine - Ruby M17N の設計と実装