Bug #10704
closed
Normalization of path names on OSX
Added by nobu (Nobuyoshi Nakada) over 9 years ago.
Updated over 9 years ago.
Description
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 で修正しました。
- 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ごとに判別が必要でしょう。
- Status changed from Assigned to Closed
- % Done changed from 0 to 100
Applied in changeset r49168.
dir.c: normalize CIFS too
- dir.c (need_normalization): not only HFS+, CIFS (SMB) is also
decomposed. [Bug #10704]
Also available in: Atom
PDF
Like0
Like0Like0