彷徨えるフジワラ

年がら年中さまよってます

トルコ文字と case insensitive filesystem

Mercurialcase insensitive filesystem 周りの修正をする際に仕込んだ知識のまとめエントリその2。

トルコ語 (Turkish) の文字には、『アイ』(I) の文字のバリエーションに以下の4つがあるらしい。

  • U+0049: LATIN CAPITAL LETTER I
  • U+0069: LATIN SMALL LETTER I
  • U+0130: LATIN CAPITAL LETTER I WITH DOT ABOVE
  • U+0131: LATIN SMALL LETTER DOTLESS I

これらの文字に関して、Python 2.6/2.7 の Unicode 実装ベースで lower/upper 変換を行った際の関係は以下のようになっている (lower/upper 結果が自分自身と等しいものに関しては記載を省略)。


U+0049 と U+0069 は、いわゆる ASCII での "I" と "i" に相当するもの。

このような関係にあるトルコ文字 I のバリエーションに対して、WindowsNTFSMac OS X の HFS+ といった case sensitive filesystem 上で、ファイル名としての互換性を確認すると:

U+0049 と U+0069 の間以外は全然互換性が無い。 lower/upper 結果が合致するからといって、迂闊にファイルの同一性を確信できないなぁ.... orz

で、Windows の場合、言語学的 (linguistic) な case 変換があるとかないとかそんな話が。

ちなみに、Mac OS XWindows の間で『ファイル名が勝手に変わっちゃうよ!』問題で悪名高き Unicode の NFD (Normalization Form D) と lower を併用すると、この4文字の間に限っては Unicode ベースでの同一性比較とファイルシステム上での同一性比較の判定結果が一致するのだけれど、では全てのケースで NFD + lower の組み合わせが妥当か?と言うと、そういう訳でもないのが悩ましいところ。