5

大文字と小文字を区別しない UTF-8 文字列比較のさまざまな戦略を評価しようとしています。

私は Unicode コンソーシアムからいくつかの資料を読み、ICU で実験を行い、さまざまな実装品質の代替案を考え出そうとしました。

Simple Case Mapping と Full Case Mapping でテキストが異なるのを何度も見たので、その違いを完全に理解したいと思いました。

私が読んだように、Simple Case Mapping は「コンテキストフリー」です。つまり、ペイロードがどの言語であるかを知る必要はありません。これは、トルコ語の「I/ı/İ/i」の大失敗により、おおよその結果を示します。

一方、フル ケース マッピングは、マッピングを実行できるようにペイロードの言語を認識する必要があります。その追加情報により、トルコ語の文字列としての「Kim」が大文字の「KİM」になるが、英語の文字列としての「Kim」が大文字の「KIM」になる場合をカバーする特別な手段を講じることができます。

私はそれを正しく理解していますか?

言語ごとに異なる「多面的な」コードポイントの例は他にありますか?

ありがとう!

更新:単純なケース マッピングを言語に依存しないと言及しているソースの 1 つは、ICU のドキュメントです。Unicode の真実と解釈しましたが、もしかしたら単なる実装のステートメントではないでしょうか?

4

2 に答える 2

2

いいえ、「フルケースマッピング」は、1つのコードポイントを複数の新しいコードポイントに置き換える必要があるケーシングです。単純なケースマッピングは、単一のコードポイント置換です。

これを自分で実装したい場合は、UnicodeCaseFolding.txtファイルがこれを正しく行うために重要です。ステータスフィールドコード「T」に注意してください。特に、トルコ語Iの問題を処理するためにあります。

于 2009-11-25T17:19:21.713 に答える
2

うーん... 子音の組み合わせ "SS" は、ほとんどの西洋言語では "ss" に変換されますが、ドイツ語では特殊文字 "ß" になる場合があります。それは単なる「可能性」であり、考慮すべき非常に複雑な使用規則があります。

これは照合順序に直接影響しないと思います (もちろん、ドイツ人なら誰でも私を訂正してくれます)。

于 2009-11-25T08:52:45.873 に答える