2

[主にCharacter Encoding の独立した文字スワップの問題を説明しようとすることに触発されましたが、これらの他の質問にも完全な答えが含まれていません: How to reverse a Unicode string , How to get a reversed String (unicode safe) ]

Unicode で視覚的な文字列反転を行うことは、見た目よりもはるかに困難です。UTF-32 以外の保存形式では、バイト単位ではなく、コードポイントの境界に注意を払う必要があります。しかし、グリフを組み合わせているため、それだけでは十分ではありません。仕様には、逆にしたい基本単位に近い「書記素クラスター」の概念があります。しかし、それでも十分ではありません。Bidi オーバーライドや最終フォームなど、修正が必要なあらゆる種類の特殊文字があります。

この疑似アルゴリズムは、私が知っているすべての簡単なケースを処理します。

  1. 文字列を単語と単語区切り文字の交互のリストに分割します (一部の単語区切り文字は空の文字列である可能性があります)
  2. このリストの順序を逆にします。
  3. リスト内の各文字列について:
    1. 文字列を書記素クラスターにセグメント化します。
    2. 書記素クラスターの順序を逆にします。
    3. 逆の順序で最初と最後のクラスターを確認します。それらの基本文字を正しい形式に再割り当てする必要がある場合があります (たとえば、U+05DB HEBREW LETTER KAF がシーケンスの最後にある場合は、U+05DA HEBREW LETTER FINAL KAF にする必要があり、その逆も同様です)。
    4. シーケンスを結合して文字列に戻します。
  4. 逆順の単語のリストを再結合して、最終的な逆順の文字列を生成します。

...しかし、双方向のオーバーライドは処理されません。また、私が知らないものもあると確信しています。誰もギャップを埋めることができますか?

4

0 に答える 0