7

一連の Unicode コードポイントがあります。私が実際に行う必要があるのは、これらのコードポイントを一連のコードポイントではなく一連の文字として繰り返し処理し、個々の文字のプロパティを決定することです。たとえば、文字などです。

たとえば、私が Unicode 対応のテキスト ボックスを作成していて、ユーザーが複数のコードポイントである Unicode 文字を入力したとします。たとえば、"e with diacritic" です。この特定の文字も 1 つのコードポイントとして表すことができ、その形式に正規化できることはわかっていますが、一般的なケースではそれが可能だとは思いません。バックスペースを実装するにはどうすればよいですか? 複数のコードポイントを入力した可能性があるため、最後のコードポイントを単に消去することはできません。

一連の Unicode コードポイントを文字として反復処理するにはどうすればよいですか?

編集: ICU が提供する Break Iterators は、私が必要としているもののほとんどのようです。ただし、私は ICU を使用していないため、独自の同等の機能を実装する方法に関する参照は、受け入れられる回答になります。

別の編集: Windows API が実際にこの機能を提供していることが判明しました。MSDN は、すべての文字列関数を 1 か所にまとめることをあまり得意としていません。CharNextは私が探している関数です。

4

2 に答える 2

5

Use the ICU library.

http://site.icu-project.org/

for example:

http://icu-project.org/apiref/icu4c/classUnicodeString.html#ae3ffb6e15396dff152cb459ce4008f90

is the function that returns the character at a particular character offset in a string.

于 2011-11-26T22:07:21.327 に答える
1

UTF8-CPPプロジェクトには、コードポイントごと、文字ごとなど、Unicode 文字列のコードポイントを反復処理するための、きれいで読みやすい STL のようなアルゴリズムがたくさんあります。

「文字ごと」のアプローチは明らかではない可能性があることに注意してください。これを行う簡単な方法の 1 つは、正規化形式 C で UTF-32 文字列を反復処理することです。これにより、固定長エンコーディングが保証されます。

于 2011-11-26T22:11:43.867 に答える