Issue #10704 has been updated by Yui NARUSE.

Status changed from Closed to Assigned

http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/38356 によると、

> 正確にはVFSドライバのレイヤーですね。
> そこで、上位レイヤーからのパスはファイルシステムに適した形に、
> ファイルシステムからのパスはdecomposed UTF-8に、基本的には変換します。
> 
> 「ファイルシステムに適した形」というのは、必ずしもdecomposed Unicodeには
> ならないという意味です。
> 例えば、HFS+ではdecomposed UTF-16になります。
> しかし、smb経由でWindowsのファイルサーバーにアクセスする場合、
> Mac OS Xはファイル名を合成済み形式にしてアクセスを行います。
> そして、分解済みのファイル名を持つファイルにはアクセスすることができません。
> 
> 例外がUFSとNFSで、この2つでは上記の処理が行われません。

とのことなので、仰る解釈は誤りです。
思うにFSごとに判別が必要でしょう。

----------------------------------------
Bug #10704: Normalization of path names on OSX
https://bugs.ruby-lang.org/issues/10704#change-50825

* Author: Nobuyoshi Nakada
* Status: Assigned
* Priority: Normal
* Assignee: cruby-mac
* Category: platform/darwin
* Target version: 
* ruby -v: r49165
* Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN
----------------------------------------
OSXでのファイル名のUnicode normalizationは、今までHFS上の場合だけ行ってきましたが、HFS以外でも必要そうです。

## 実験

(1) Windows上でNFCとNFDのファイルを作る。

    > cmd /c ver
    Microsoft Windows [Version 6.1.7601]

    > ruby -e '%W[\u{304c} \u{304b 3099}].each{|n| File.write(n, "\n")}'

(2) そのディレクトリをOSXからsmbでマウント。

(3) `Dir.entries`で確認。

    $ ruby -v -e 'puts Dir.entries(ARGV[0]).grep(/^[^.]/).map(&:dump)' $g
    ruby 2.3.0dev (2015-01-06 trunk 49163) [universal.x86_64-darwin14]
    "\u{304b}\u{3099}"
    "\u{304b}\u{3099}"

どちらもNFDになってしまいます。

trunkでは r49166 で修正しました。




-- 
https://bugs.ruby-lang.org/