10

C プログラムで、UTF-8 でエンコードされた有効な文字列のリストを Unicode コード ポイント順に並べ替えたいと考えています。照合なし、ロケール認識なし。

だから私は比較機能が必要です。Unicode 文字を繰り返し処理するような関数を作成するのは簡単です。(たまたまGLibを使用しているので、 の戻り値を反復しg_utf8_next_charて比較しますg_utf8_next_char。)

しかし、好奇心とおそらく単純さと効率から、私が疑問に思っているのは、単純なバイトごとのstrcmp(またはg_strcmp)は実際に同じ仕事をするのでしょうか?UTF-8は最初に最上位ビットをエンコードし、N + 1バイトでエンコードする必要があるコードポイントは、Nバイトでエンコードする必要があるコードポイントよりも大きな初期バイトを持つため、そうすべきだと考えています。

しかし、多分私は何かを逃していますか?前もって感謝します。

4

1 に答える 1

12

はい、UTF-8 はコードポイントの順序を保持するため、そのまま使用できますstrcmp。これは、UTF-8 の (多くの) 美しい点の 1 つです。

1 つの注意点は、Unicode のコードポイントは UTF-32 値であり、Unicode 文字列を「コードポイント」順に照合することについて話している一部の人々は、実際には「コードポイント」という単語を誤って「UTF-16 コード単位」を意味するために使用していることです。順序を UTF-16 コード単位の照合順序に一致させるには、もう少し作業が必要です。

于 2013-08-20T08:08:12.903 に答える