Unicode準拠とは別のUnicode Technical Standard#10(UCA)での照合は、そのことについて疑問がある場合に備えて、順序付け/並べ替えだけでなく比較も含めると "文字列2 "。 2つの文字列で同じ値でないコードポイントは、少なくとも照合と比較の目的で等しいとみなされることがあります。少なくとも、これはPerl標準ライブラリの観点から話しているblog postによって暗示されています。Delphi用のUnicode照合アルゴリズム(UCA)コードはありますか?
私が知りたいのは、(a)Delphi XE2は既にUnicode Collation Spec全体を完全に実装していますか(b)そうでない場合は、第三者のライブラリがそうしていますか?
サンプルコード:
Str1 := Chr($212B);
Str2 := Chr($C5);
n := CompareStr(Str1,Str2); // in delphi this is not zero, under UCA rules, should be 0.
Unicode照合順序の仕様によると、Unicode照合順序は、比較の下で同等の上記のすべてのコードポイントを考慮する必要があります。これはバイナリの観点からは意味をなさないので、DelphiのCompareStrもperlの(リンクされた記事の)cmpもUnicodeの不具合で汚染されていませんが、ユニコード対応Delphiでの照合、perl Unicode :: Collationライブラリのように?どうやって?
更新AnsiCompareStr
は、Win32 CompareString
を呼ぶだろうし、上記のようないくつかのロケール固有のケースを扱うだろう、とインターネットを中心に読んでから、WindowsのクラシックUnicode照合順序の挙動とUCAは、UCAがに見せかけて、ゆっくりとではなく、完全に収束していますそれはWindowsの照合のように変更されるものです。
ICUラッパーは直接実装しませんが、C/C++ ICUライブラリーコードのみをラップします。 –
リンクが良好です。 UCAがMicrosoftの主導権を守っていない理由は何故だろうか。 MSはネイティブのUTF-16を初めて使用し、データベースとUnicode照合のすべてを懸念していたためです。 –
@ウォーレン、そうだよ。私はDelphiネイティブの実装について認識していません。 NexusDBのThorsten Englerも同じことを探していました。完全なUCA互換性が必要な場合は、直接問い合わせてください。私の編集も参照してください。あなたの元の投稿の一部を見落としたからです。 –