【分散型バージョン管理】 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
469デフォルトの名無しさん:2010/11/27(土) 22:09:44
fixutf8が独自のマップを作っているみたいだけど、これくらいやらないと解決しないんじゃないかな?
470デフォルトの名無しさん:2010/11/28(日) 03:14:33
わかるけどRuby1.9じゃないがエンコーディングの情報も入れてくれないと、
仮にクライアント側で個別に環境毎にファイル名の対処するにしてもできなくないか?

UTF-8のファイル名をバイト列で格納する、そのバイト列のままWindowsに出力すれば
化けるか、クライアントでエラーが起きるかというのが今までで実際に起きている問題だろ
逆もしかり

もしクライアント側で環境に合わせて変換するにしても、
このバイト列はなんなんだ?何から変換すればいいんだ?ということになる。
そりゃ、もちろん推測はできるだろうが。

471デフォルトの名無しさん:2010/11/28(日) 03:19:57
>>466
HFS+のファイル名がNFDとは違うのは、
別の正規化というよりもエンコーディング形式のUTF-8-MACとして扱われているくらいだね

MACの正規化って違うんじゃね?という人は、UTF-8-MACでぐぐったら早いと思う
472デフォルトの名無しさん:2010/11/28(日) 03:40:53
>468
Windows SDKが定義する16bitのWCHARという型って意味でWCHARって書いたんだけど、紛らわしかったか。すまん。
UNIXのファイル名がバイト列に過ぎないのと同様に、生き別れのサロゲートペアなんかも入れられたはず。BOMやU+FFFFも入るかも。
473デフォルトの名無しさん:2010/11/28(日) 05:48:55
>>471
エンコーディングと正規化の話は独立した別の話だし、UTF-8-MACはエンコーディングじゃないよ。
GNU iconvやSamba等でUTF-8-MACをエンコーディング名として指定した場合に、エンコーディング
としてはUTF-8を使いつつ、特定の正規化形(=Appleが古いAPIとの互換性の都合でU+2000-2FFF,
U+F900-FAFF, U+2F800-2FAFFの範囲を分解しないように一部改変したNFD)で正規化する仕組み
になってるだけ。
ちなみに UTF-8-MAC という名前の初出は、日本Sambaユーザー会のsugj-tech MLの人達が、いわ
ゆる濁点問題を解決するために作成したパッチ。命名したのは日本人だったりする。
474デフォルトの名無しさん:2010/11/28(日) 11:56:54
>>473
前半はわかってる。
>>471を見てUTF-8-MACはエンコーディングなんだ、と勘違いする人がでてくるなら、その話はわかる。