In article <488BF0DF.5020208 / airemix.jp>, "NARUSE, Yui" <naruse / airemix.jp> writes: > Windows 上での Dir.open のデフォルトは、 > :external_encoding = UTF-8 > :internal_encoding = CP932 > なので、こちらが最も使用頻度の高い例でしょうか。 > デフォルトの設定を「使う」と言うのかどうかは微妙なところですが。 デフォルトの設定は「使う」とはいえないでしょう。 単にそういう変換がハードコードされていて、デフォルトでその変 換が動くとしても問題ないので、:internal_encoding というオプ ションの存在意義にはなりません。 あと、Dir.open がデフォルトで Windows の Unicode な API を (コード変換して) 使うのか、locale な API を使うのかはよくわ かっていませんが、後者なら変換は不要でしょう。 > って、もしかして、田中さんの想定だと、Windows では、 > :external_encoding に locale を指定可能ってことになってます? > :external_encoding の部分では欠落の発生する変換は > 行わないつもりだったのですが、 いえ。[ruby-dev:35644] で尋ねて [ruby-dev:35652] で | Windows では :external_encoding は Unicode 系のみですかね。 と答えていただいたので、たとえば UTF-8, UTF-16LE などは指定 可能だが、EUC-JP などは指定できないと想定しています。 > 試行錯誤したいときは :internal_encoding を使わなければいいですよね。 > そして、ここで使わずしてどこで使うんだという質問の回答は、 > デフォルト動作で使う、になります。 デフォルト動作の内部で使うというのは、ユーザが指定可能なオプ ションの存在意義にはなりません。 > このあたりの問題はもとより Windows の A 系 API が持っている問題ですね。 > また、Windows においてはデフォルトでは locale の文字列を返し続けないと > いけないでしょうから、逃れられない問題ともいえます。 ファイル名が文字列で、コード変換を行う限り、逃れられないのは そう思います。 しかし、:internal_encoding で Ruby が変換を行うと、問題を把 握するのに Windows の知識と Ruby の知識の両方が必要になりま す。:internal_encoding がなければ、Windows の知識だけで済み ます。 Windows の資料は世の中にあるでしょうし、知っている人もそれな りにいるでしょう。しかし、Ruby での変換に関する知識も、とな ると、難易度がかなりあがるんじゃないでしょうか。 逃れられないからといって、困難にしていいとは思いません。 :internal_encoding の有用性が低いとすれば、そういう機能で問 題を困難にするのは間違っていると思います。 > この辺は transcode の失敗時のオプション拡張で多少は。 具体的にはどうするんでしょう? たとえば、:internal_encoding => "ISO-8859-1" と指定した場合 で、「あいうえお」というファイル名に出会った時、どういう値を 返すんですか? > このパッチだと、readdir が何を返すかに依存しますが、 > Windows 環境において UTF-16LE か locale かどちらかしか得られませんよね。 readdir が UTF-16LE でファイル名を返すのは無理じゃないですか? Windows の Unicode ファイル名は現在扱われていませんので、 locale の場合しか扱っていません。Unicode ファイル名の実装は 後の話です。 > まとめると、以下の動作ができる必要があるーですかね。 > > == デフォルト > Windows: UTF-16LE -> locale 自動変換 > Unix: locale > > == 生 > Windows: UTF-8 > Unix: locale これらのふたつは、[ruby-dev:35617] で述べた、ファイル名を文 字として正しく扱えるようにする責任が * プログラムでなく、環境にある * プログラム自身にある というふたつの立場に対応するもので、必要ですし、重要です。 > == 強制指定 > Unix: 任意の encoding に force_encoding これはとくに必要性が高いとは思っていません。 Unix では、あっても問題ないかもしれませんが。 -- [田中 哲][たなか あきら][Tanaka Akira]