成瀬です、地震で興奮して眠れないのでつづき。

Dir.entries で登場する三つのエンコーディングを以下のように名づけます。
(1) path_enc 引数であるパス指定のエンコーディング
(2) fs_enc 実際のファイルシステム上のエントリのエンコーディング
(3) res_enc 結果配列内の各文字列のエンコーディング

なお、
* path_enc は実際に渡される引数でなく、
  アプリケーションが持っているパスのエンコーディング
* fs_enc は ruby 自体が知っているか locale か、オプション指定されたもの
とします。
* res_enc はアプリケーションが期待するエンコーディング

これらの状態によって [ruby-list:44892] を分類すると、

A. dirname
A.0. path_enc is 7bit
* 無変換
* force_encoding により、path_enc で res_enc を指定する手法を、
  情報欠損なしにおこなえる

A.1. path_enc == fs_enc or path_enc == ASCII-8BIT
* 無変換 (invalid でも無視)

A.2. path_enc != fs_enc
A.2.a. 自動変換
* path が path_enc において invalid
* path が path_enc から fs_enc に変換できない
A.2.b. 手動変換
* 手動変換して渡す

B. ファイルリスト
B.1. fs_enc == res_enc
* 無変換 (invalid でも CODERANGE_BROKEN だけつけて無視)

B.2. fs_enc != res_enc
B.2.a. 自動変換
* path が path_enc において invalid
* path が path_enc から fs_enc に変換できない
B.2.b. 手動変換
* そのまま受取り、map を使って変換

memo.
1. res_enc を伝える手段は path_enc でいいのか?
1.1. path_enc == res_enc != fs_enc
path_enc のエンコーディングをもって res_enc と判断するのは妥当
-> デフォルトで、結果のエンコーディングに path_enc を用いるのは妥当
1.2. path_enc != res_enc
res_enc を伝えるために path_enc を変換するのは避けたい
-> :result_encoding の必要性

2. 自動変換に失敗した際の対処
fallback proc でも渡しますかねぇ
-> transcode の対応待ち

結局のところ、無駄な変換は避け、必要な場合は fallback じゃないですかねぇ。
当面は ASCII-8BIT 指定と絡めて無変換でもらい、自力で頑張るって方向かな。

-- 
NARUSE, Yui  <naruse / airemix.jp>