script encoding のまとめ
Ruby 1.9 でのエンコーディングは以下のようになっているようだ。
「scprit encoding」はスクリプトファイルの読み込み時のエンコーディングで、「default external」は外部へ出力するときIOオブジェクトから読み込むときのエンコーディングのこと。
通常のスクリプトの場合
オプション/magic comment指定 | script encoding | default external |
---|---|---|
-K・-Eなし、magic commentなし | US-ASCII | locale |
-K・-Eなし、magic commentあり | magic comment | locale |
-Eあり、magic commentなし | US-ASCII | -E |
-Eあり、magic commentあり | magic comment | -E |
-Kあり、magic commentなし | -K | -K |
-Kあり、magic commentあり | magic comment | -K |
スクリプトのエンコーディングの優先順位は「magic comment > -K, -E オプション > デフォルト(US-ASCII)」となっているようだ。
出力のエンコーディングは「-K, -E オプション > デフォルト(locale)」の順番だ。
-eおよびstdinの場合
オプション/magic comment指定 | script encoding | default external |
---|---|---|
-K・-Eなし、magic commentなし | locale | locale |
-K・-Eなし、magic commentあり | magic comment | locale |
-Eあり、magic commentなし | locale | -E |
-Eあり、magic commentあり | magic comment | -E |
-Kあり、magic commentなし | -K | -K |
-Kあり、magic commentあり | magic comment | -K |
stdin や -e からは、出力エンコーディングは基本的に通常のスクリプトファイルの時とおなじだが、読込む時のエンコーディングは通常のスクリプトで US-ASCII となっていた箇所が、locale に変わっている。
これは、-Eutf-16be などとすると-eの引数全体が一つの識別子とみなされてしまうことへの対応らしい。