まつもと ゆきひろです

In message "Re: [ruby-dev:34923] open() and encodings"
    on Wed, 4 Jun 2008 08:08:54 +0900, "NARUSE, Yui" <naruse / airemix.jp> writes:

|Dir.open/entries に関連して、open() 絡みの変更案です。
|
|まず、ファイルパスについて、現在はファイルシステムのエンコーディングに関らず、
|与えられたバイナリ列をそのままOSに渡していますが、
|ファイルシステムのエンコーディングに変換した上で渡した方が親切でしょう。

「ファイルシステムのエンコーディング」って変換して渡せるほど
信頼できるものなんでしょうか。変換ってのは間違ってると致命的
ですから。

WindowsやOSXではそうなのかもしれませんが、UNIXではかならずし
もそうでもないような。このパッチではlocaleを採用しているよう
ですが、ひとつのファイルシステムで複数のエンコーディングが混
在している場合もありますから、明示的にエンコーディングが指定
できないとまずいです。というか、むしろ最初から変換してほしく
ありません。

|次に、現在open()はエンコーディングを別にオプションで取ることができません。
|これも
|open("filename", internal_encoding:"EUC-JP", external_encoding:"Shift_JIS")
|などと取れたほうが便利ではないでしょうか。
|なお、キー名はとりあえずそのまんま長めの名前にしています。
|これならば誤解はないであろうし、後でもっと良い名前を思いついたときに変えやすいと思ったので。

えーと、IO.readなどの類推からいえば、まず

  open("filename", encoding: "EUC-JP:Shift_JIS")

の導入が先だろうと思います。で、internal_encodingなどに反対
するわけではありませんが、その場合にはopen_key_argsも同じオ
プションを受け付けるべきでしょうね。

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