Script Encoding Summary

[ruby-dev:33389]より転載。

通常のスクリプトの場合        | script encoding | default external |
------------------------------+-----------------+------------------+
-K・-Eなし、magic commentなし | US-ASCII(*1)    | locale           |
-K・-Eなし、magic commentあり | magic comment   | locale           |
-Eあり、magic commentなし     | US-ASCII(*1)    | -E               |
-Eあり、magic commentあり     | magic comment   | -E               |
-Kあり、magic commentなし     | -K              | -K               |
-Kあり、magic commentあり     | magic comment   | -K               |


-eおよびstdinの場合           | 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               |

(*1) 2.0からはUTF-8となる。

1.8からのscript encodingに関する非互換まとめ

  • -Kがない場合、1.8では1.9のASCII-8BIT相当の挙動だったが、1.9 ではUS-ASCIIとして扱われる。2.0ではUTF-8。 よって、-Kなしでリテラル中に多バイト文字が含まれている場合、 1.8ではencodingと運によっては大丈夫だったものが 1.9では必 ずパース時にエラーが発生するようになる。
  • magic commentがあった場合、1.8では無視されるが、1.9ではそれ がscript encodingに反映される。-Kよりも優先。
  • 上記の表にはないが、コマンドラインオプション・RUBYOPT・shebang の間の優先順位が1.9では変更されている。 よって、それぞれに矛盾する-K指定が存在した場合、1.8とは異な る優先順位でscript encodingが決定される。 具体的には以下の通り(左が優先)
    1.8
    shebang > RUBYOPT > コマンドライン
    1.9
    コマンドライン > RUBYOPT > shebang