成瀬です、地震で興奮して眠れないのでつづき。 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>