CoreFoundation フレームワークの CFString オブジェクトに格納されている文字数 (基になる Unicodeコード ポイントで表される) を取得する方法はありますか?
CFStringGetLength
利用可能な機能があります:
例: 2 番目の (SMP) Unicode プレーンにある1 文字 ( Shavian Alphabetの文字「peep」) を含む文字列の長さを取得しようとしています。
UInt8 arr[] = {0xf0, 0x90, 0x91, 0x90}; //UTF8
CFStringRef r = CFStringCreateWithBytes(0, arr, sizeof(arr),
kCFStringEncodingUTF8, false);
CFIndex length = CFStringGetLength(r);
ドキュメントには、次のものが返されると記載されています。
theString に格納されている文字数 (UTF-16 コード ペア)。
ご覧のとおり、この文は矛盾しています。文字数は必ずしも UTF-16 コード ポイントの数と同じではありません。ただし、中括弧内の部分はより正確です。関数の実際の結果は、UTF-16 シーケンスの数です。私の例では、関数の結果は2 (UTF-16 で文字をエンコードするために必要なシーケンスの長さ) ですが、関数名は結果が1であることを示唆しています(私の意見では)。
Unicode コード ポイントで文字数を取得する方法を見つけたいと思います。CoreFoundation でそれを行う方法はありますか?