From: "U.Nakamura" Date: 2008-01-26T04:05:06+09:00 Subject: [ruby-dev:33389] Re: summary of script encoding こんにちは、なかむら(う)です。 というわけで、まつもとさんの意見を踏まえて、以下の仕様で実装 に反映しました。 あと、書き忘れてましたが、[ruby-dev:33156]で指摘されていた-K のライブラリへの伝播も、なかださんがr15231で対応済みです。 US-ASCIIじゃまずいんじゃないか、という件は、どれくらいの人が 「ぎゃっ」というか見てみた方がいい気もするので、1.9.0-1リリー スに入れてみるのがいいんじゃないかと思います。 # 1.9.0-1ってそう遠くない未来に出るんですよね? 通常のスクリプトの場合 | 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 | -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.8からのscript encodingに関する非互換まとめ * -Kがない場合、1.8では1.9のASCII-8BIT相当の挙動だったが、1.9 ではUS-ASCIIとして扱われる。 よって、-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 それでは。 -- U.Nakamura