2009-11-25 16 views
5

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

私はUnicodeコンソーシアムからいくつかの資料を読み、ICUで実験し、さまざまな実装品質の選択肢を考え出しました。

シンプルケースマッピングとフルケースマッピングのテキストが異なることが多々ありますが、その違いを完全に理解したかったと思います。

私が読んだように、シンプル・ケース・マッピングは「文脈自由」です。すなわち、ペイロードがどの言語かを知る必要はありません。トルコの「I /ı/İ/ i」の惨事のために、これはおおよその結果を与えるでしょう。

フル・ケース・マッピングは、一方で、マッピングを実行できるようにペイロードの言語を知る必要があります。その追加情報を使って、トルコ文字列の "金"を大文字で "KIM"、英語文字列である "金"が大文字で "KIM"になるように特別な対策を講じることができる。

私はそれを得ましたか?

異なる言語で異なる折り畳みの「マルチファセット」コードポイントの他の例はありますか?

ありがとうございます!

更新:言語に依存しない単純なケースマッピングに言及している情報源の1つはICU's documentationです。私はそれをUnicodeの真実と解釈しましたが、実装のステートメントだけかもしれません。

答えて

2

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

これを自分で実装する場合は、Unicode CaseFolding.txtファイルがこの権利を得るために重要です。ステータスフィールドコード "T"に注意してください。具体的には、トルコ語Iの問題を処理するためです。

+0

彼らはどちらも言語の文脈を必要としていますよね?私は、CaseFolding.txtを使用せず、UnicodeData.txtのケース情報のみを使用するサードパーティ製のライブラリ(PCRE)を使用し、言語コンテキスト(明示的にも暗黙的にも、私が知る限り)を必要としません。私はそれがシンプルなケースでは有効な妥協であったかもしれないと考えました。 –

+0

絶対に。ファイルに記載されているように、 "T"ステータスコードのレコードを無視するタイミングを知る必要があります。 –

+0

私が見る限り、T状態コードはCaseFoldingに表示されます。UnicodeData.txtではなく、txtです。しかし、本当にあなたはフォールディングが言語の文脈の知識でしか行えないと言っていますか?私は文脈を必要としない妥協案を探していますが、100%完璧ではありません...しかし、それは暖かさへの道の第一歩でしょうか? –

2

まあ...子音の組み合わせ「SS」は、ほとんどの西洋言語では「ss」にダウンケースですが、ドイツ語では特殊文字「ß」になる可能性があります。それはちょうど "かもしれない"、かなり関与していると考えられるusage rulesです。

これは照合順序に直接影響しないと思います(ドイツ人はもちろん私を訂正することを歓迎します)。だから多分それは疑問な点です。

+0

ありがとうございました! SimpleとFullのマッピングの違いを正しく理解できましたか? –

+3

大文字の "ß"はあなたに "SS"を与えますが、私はoposite(小文字の "SS")を "ß"とするフレームワークを見ていません。 これは、時には「ss」であるべきであり、決定する唯一の方法は完全なドイツ語辞書を持つことであるからです。そして時にはそれだけでは十分ではありません(例えば、「weiss」と「weiß」の両方が正しい単語です)。実際には、人間でさえ、文脈なしに(それが意味する)「WEISS」を小文字にすることはできません。 –

+0

@Mihai - ありがとう、それは意味がある。私は同じ考えを持っていた、上昇は降下よりずっと簡単だった。 –

関連する問題