From: "naruse (Yui NARUSE)" Date: 2012-07-05T16:09:33+09:00 Subject: [ruby-dev:45922] [ruby-trunk - Bug #6698][Rejected] MacOSXではDir.globが返すファイル名の内容はUTF8-MACですがencodingがUTF-8になっている Issue #6698 has been updated by naruse (Yui NARUSE). Status changed from Open to Rejected imkira (Mario Freitas) wrote: > MacOSXでは、「だ」など濁点が含まれているファイル名をDir.globで調べると返ってくるencodingが間違っているようです。 > > Dir.glob('*.{jpg,png}') do |filename| > puts "#{filename} #{filename.encoding}" > end > > 「だ」というファイル名はUTF-8というencodingを使った"\u305F\u3099"と返ってきます。 > > これって、Dir.globの不具合ですかそれとも正しい動きですか? 正しい動きです。 Ruby 1.9 当初はまさに imkira さんの期待なさっている通り UTF8-MAC で返していたのですが、 それだと今回の濁点やアクセント記号を含んでいない場合に UTF-8 と異なるせいで色々不便なので、 r23308 にて UTF-8 で返すように変更しました。 ので、これは意図的なので、後述の通り変換してください。 > 表示的に"\u305F\u3099"を"\u3060"と比較すれば同じものなんですが、それぞれ違うencodingになっているため当然比較は失敗します。 同じエンコーディングでも普通に比較すれば違うものなので失敗するので、どちらにしろ変換しないとダメなのです。 > Dir.globが返したfilenameを下記のようにすると正常に比較が出来るようになります。 > > filename = filename.force_encoding("UTF8-MAC").encode("UTF-8") ちなみにこれは filename.encode!("UTF-8", "UTF8-MAC") と書けます。 ---------------------------------------- Bug #6698: MacOSXではDir.globが返すファイル名の内容はUTF8-MACですがencodingがUTF-8になっている https://bugs.ruby-lang.org/issues/6698#change-27824 Author: imkira (Mario Freitas) Status: Rejected Priority: Normal Assignee: naruse (Yui NARUSE) Category: Target version: 1.9.3 ruby -v: ruby 1.9.3dev (2011-08-02 revision 32803) [x86_64-darwin10.8.0] =begin MacOSXでは、「だ」など濁点が含まれているファイル名をDir.globで調べると返ってくるencodingが間違っているようです。 Dir.glob('*.{jpg,png}') do |filename| puts "#{filename} #{filename.encoding}" end 「だ」というファイル名はUTF-8というencodingを使った"\u305F\u3099"と返ってきます。 表示的に"\u305F\u3099"を"\u3060"と比較すれば同じものなんですが、それぞれ違うencodingになっているため当然比較は失敗します。 Dir.globが返したfilenameを下記のようにすると正常に比較が出来るようになります。 filename = filename.force_encoding("UTF8-MAC").encode("UTF-8") これって、Dir.globの不具合ですかそれとも正しい動きですか? =end -- http://bugs.ruby-lang.org/