【分散型バージョン管理】 Mercurial 【hg】

このエントリーをはてなブックマークに追加
466デフォルトの名無しさん
>>457
ちょっと誤解があるようだから補足しとく。

HFS+のファイル名の正規化形(Normalization Form)は正規のNFDとは少し違うので、HFS+の正規化
形は標準とは異なるという主張自体は正しい。
ただし、独自の正規化形であってもHFS+がファイル名を正規化しているのは確かなので、HFS+の
ファイル名は正規化されていないという主張(たまにそう書いてしまう人がいる)は厳密には間違い。

むしろ正規化されてないのはNTFSの方で、NTFSでは1つのファイル名でNFCとNFDの混在すら可能。
Windowsの日本語IMEはNFCしか吐かないので、NTFSはNFCで正規化されていると誤解されやすい
んだけど、ファイル名としてNFDな文字列やNFCとNFDが混在した文字列を指定した場合に、NTFS
で保存されるファイル名がNFCに正規化されるような事はない。(これは実際に試せば分かる)

ついでだけど、伝統的な*NIXのファイル名はNULL文字を含まないバイト列に過ぎないので、エンコー
ディングの概念は無いし、NTFSよりもファイル名の制限が緩い。
gitがファイル名を保存する時に単なるバイト列としか見なさない実装(だよね?)なのはこれが原因。

SCMがファイル名を正規化されたUnicode文字列であると仮定できれば話は色々と単純になるんだけ
ど、世の中には色々な環境があるのが悩みどころ。
467デフォルトの名無しさん:2010/11/27(土) 21:57:34
NTFSのそれは (WCHAR)0 を含まない WCHAR列に過ぎないんじゃなかったっけ。
と思ったけど大文字小文字の話が合った。
468デフォルトの名無しさん:2010/11/27(土) 22:05:47
WCHARも16ビット、32ビットあって単純じゃないのよね。
NTFSも本当にUTF-16なのか?という疑問もあるらしいし。
http://jp.rubyist.net/magazine/?0025-Ruby19_m17n#f07