H.Hiroс

「CSI方式」というのはあくまで、「文字列のインスタンス中に、文字列の内容と、それが何の文字コードであるかを別個に保存する」「文字列の内容のバイナリ表現は、何の文字コードであるかに依存しており、特定の文字コードでの表現に勝手に変更することはしない」という意味でしかないのです。Encoding.default_externalをどうするかは別の話なのです。

ちなみに、作者が理由まで明確に書いていたわけでないので確実なことは言えないですが、作者がEncoding.default_externalをUTF-8にするようにしたのは、MSYS2ベースに変更した結果なのではないかと推測しています。
MSYS2は、Unix系OS向けに書かれたソフトウェアをWindows上でビルドしたりする機能を提供してくれるのですが、これがUTF-8を前提としているため、そのほうが都合がよかったのではないかと思っています。(ちなみに私はMSYS2を先に導入し、そこからRubyInstaller2ではなく普通のRubyをインストールして使っています。)

2017年4月19日 21:34 俊(とし) <toshio.otaguro / gmail.com>:
> Encodingに関する質問です.
>
> 従来,Windows用のRuby実行環境としてRubyinstallerを使用してきました.簡単にインストール出来て一通りの実行環境が揃うので便利でした.ところが最近作者が多忙になり,更新が滞るようになってしまいました.現状は2.3.3p222で止まっています.
>
> そこで別の作者が継続を買って出て,Rubyinstaller2なるものがリリースされています.先日,これを用いて2.4.1をインストールしてみてびっくりしました.なんと,Encoding.default_externalがUTF-8に決め打ちされているようなのです.作者の注意書きにもそう書いてあるので,これは意図したものであると思われます.Windowsのコマンドプロンプトからirbを起動して確かめましたが,Windows日本語版なので,localeから決まるEncoding.default_externalはWindows-31Jのはずなのに,UTF-8が返ってきます.これでは,$stdinや$stdoutなどを使うスクリプトの中には期待通りに動かないものが出てくるのではないかと思います.
>
> 元の作者によるRubyinstallerではこのようなことはなく,ちゃんとWindows-31Jが返ってきていました.
>
> 私は,Rubyの多言語化はCSI方式に基づくと理解していましたが,この作者の理解は異なるようです.私の理解と懸念は当たっていますでしょうか?ご教示いただければ幸いです.
>
> --
> 俊(とし)
>



-- 
H.Hiro / Maraigue
http://hhiro.net/about/
main / hhiro.net