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]