ものがたり(旧)

atsushieno.hatenablog.com に続く

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年に存在しなかったっていう言い訳は通用しないっぽい。