[ruby-dev:47877] Re: [Mac OS X] Dir.glob で取得したファイル名のバイト列が異なる

From: "NARUSE, Yui" <naruse@...>
Date: 2014-01-09 01:04:36 UTC
List: ruby-dev #47877
OS XのHFS+上のファイル名をRubyでどう扱うべきかについては、
今でも知見が十分に得られているとは言い難いので、
どのような問題に遭遇したのか共有していただけると助かります。

2014年1月9日 10:02 Watson <watson1978@gmail.com>:
> ご返答ありがとうございます。
>
> 仕様変更ということなので、今後再び振る舞いが変わることがなさそうなので、
> 現在、私が遭遇している問題についてはこちらで対処したいと思います。
>
>
> ありがとうございました。
>
> (2014/01/09 9:53), NARUSE, Yui wrote:
>> 端的には仕様変更です。
>> 長大な議論の果てに変更されたわけなのですが、詳細をすぐには思い出せないので、
>> さしあたっては http://bugs.ruby-lang.org/issues/7267 を御覧ください。
>> 解説が必要でしたら解説します。
>>
>> 2014年1月3日 16:33 Watson <watson1978@gmail.com>:
>>> Ruby 2.0 までは OS X のファイル名を Dir.glob で取得したときには
>>> OS X ファイルシステムが返す Normalization Form D バイト列が Dir.glob で
>>> 取得されておりました。
>>>
>>> Ruby 2.1 からは Normalization Form C に変換したバイト列が Dir.glob で
>>> 取得されるようになっているようなのですが、仕様が変わったのでしょうか?
>>>
>>> % cat test.rb
>>> system "touch 'が'"
>>> Dir.glob("*").each do |file|
>>>   next if file == $0
>>>   puts "** #{file} **"
>>>   file.each_byte do |b|
>>>     p b
>>>   end
>>> end
>>>
>>> % ruby -v test.rb
>>> ruby 2.0.0p247 (2013-06-27 revision 41674) [universal.x86_64-darwin13]
>>> ** が **
>>> 227
>>> 129
>>> 139
>>> 227
>>> 130
>>> 153
>>>
>>> % ruby -v test.rb
>>> ruby 2.1.0p0 (2013-12-25 revision 44422) [x86_64-darwin13.0]
>>> ** が **
>>> 227
>>> 129
>>> 140
>>
>>
>



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

In This Thread