From: "NARUSE, Yui" Date: 2008-07-30T11:25:46+09:00 Subject: [ruby-dev:35693] Re: encoding of Dir#path 成瀬です。 At Tue, 29 Jul 2008 20:43:39 +0900, Tanaka Akira wrote: > > 以下のように、Dir#path で返ってくるもののエンコーディングが、 > Dir.open に渡したものと異なるのは変ではないでしょうか。 > > % ./ruby -Ku -ve ' > dirname = "/tmp/\x91\x92\x93" > Dir.mkdir(dirname) > p [dirname, dirname.encoding] > d = Dir.open(dirname) > dirname2 = d.path > p [dirname2, dirname2.encoding] > ' > ruby 1.9.0 (2008-07-29 revision 18257) [i686-linux] > ["/tmp/\x91\x92\x93", #] > ["/tmp/\x91\x92\x93", #] > > というわけで以下のようにするのはどうでしょう。 いいのではないでしょうか、コミットしてください。 ところで、この dir_data の path の encoding で、 dir_data の extenc を代用できそうに思えるのですが、どうでしょうか。 Unix: path: US-ASCII 以外 -> extenc 指定時: 両者が異なる場合が問題だが、force_encoding(extenc)かなぁ extenc 未指定: 問題なし path: US-ASCII -> extenc 指定時: US-ASCII 以外の場合は path を force_encoding(extenc) extenc 未指定: path を force_encoding(filesystem_encoding) Windows (ANSI): path, extenc ともに常に locale 固定 Windows (Unicode): path を encode(extenc) にあわせる なので、おおむねうまくいきそうに見えるのですが。