コンテンツへスキップ
ものがたり
戻る

How were expansions defined?

string s = "\u00E6\u0304";  

Console.WriteLine ("\u01E3".Normalize (  

    NormalizationForm.FormD) == s);  

Console.WriteLine (compareInfo.Compare ("\u01E3", s));

\u01E3というのは、aとeの合字にmacron(̄)がくっついたものなのだけど、Unicode Character Databaseでは、これは\u00E6\u0304と同じ文字という扱いになっている。\u00E6というのはaとeの合字で、\u0304はmacronだから、当然同じになっていてくれないと困る。

で、どういうことかというと、sortkeyを見た感じ、どうやら\u01E3は、macronがaとeの両方に付いたものとして定義しているっぽいのである。ということは、合字aeはどうがんばってnonspacing markで修飾しても\u01E3と同じ文字には出来ない、ということで…

ホントにこんなんで「UCAより良い」のだろうか…

ちなみにUnicode 1.1の時からそう決まっていたらしいから、UCAの時みたいに1995年に存在しなかったっていう言い訳は通用しないっぽい。


この記事を共有:

前の記事
GetSortKey() is a hack
次の記事
2005-05-23