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になっている
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