まつもと ゆきひろです

In message "Re: [ruby-dev:36550] Re: Encoding.default_internal  	のためのパッチ"
    on Thu, 25 Sep 2008 14:30:53 +0900, Nobuyoshi Nakada <nobu / ruby-lang.org> writes:

|> * default_internalはIOでinternalを指定しなかった場合のエンコー
|>   ディングである
|> * これが指定されている時IOからの入力は(バイナリでない限り)、
|>   このエンコーディングを持つ(必要なら変換する)。
|
|変換をさせるなら変換を指定するほうがいいんじゃないでしょうか。た
|とえばinternalを空にしたときにはdefaultを使うとか。

「変換をさせるなら変換を指定する」というのは具体的にはどうい
う意味でしょう。

私には「internalを空にしたときにはdefaultを使う」と
「default_internalはIOでinternalを指定しなかった場合のエンコー
ディングである」は同じ意味のように感じられますが。

もちろん今後とも明示的に指定した場合(モードで
「r:euc-jp:utf-8」などとしていた場合)や明示的に変換した場合
(str.encode("iso-2022-jp")のように)には変換が行われます。

今回の提案では、default_internalが指定されている場合

  open(path, "r")

で、default_externalからdefault_internalへの変換が行われると
いう意味で、暗黙の変換が発生することになり、かなり大きな方針
変更です。

|「:」なしで -E euc-jp などと指定した場合はどうなるんでしょうか。

以下の表を書いてみました。参考にしてください


             default_external   default_internal
  +-------+-------------------+-------------------+
  |  -L   |      locale       |      locale       |
  |-E :i  |      locale       |        i          |
  |-E e   |        e          |        e	  |
  |-E e:i |        e          |        i	  |
  |(なし) |      locale       |      UTF-8	  |
  +-------+-------------------+-------------------+

|また、internalとexternalそれぞれだけを指定するオプションを複数指
|定した場合とか。

-Eオプションは1度しか受け付けないことにしようと思っています。

                                まつもと ゆきひろ /:|)