3

の長さ(文字数)を決定するにはどうすればよいstd::wstringですか?

を使用myStr.length()するとバイトサイズが得られますが(私は思う)、文字数ではありません。文字数を見つけるために独自の関数を作成する必要がありますか、それともネイティブの C++ の方法またはネイティブの WinAPI の方法がありますか?

4

2 に答える 2

4

std::wstring::length()文字数が表示されます。ここで、文字wstringはオブジェクトの原子単位、つまり a として定義されますwchar。これは、標準が参照するときに意味するものですcharacters(標準での単語の使用に関する詳細については、この投稿を参照してください)。

ただし、Unicode 文字に関しては、1 つwcharが 1 つの Unicode 文字に対応するかどうかは、内部で使用されるエンコーディングに依存しwstringます。UTF-16 が使用されている場合 (必ずしもそうであるとは限りませんが)、多くの場合、wchar基本的な多言語面 (つまり、ISO-8859 から派生したすべての文字セットと、一般的に使用されている CJK のほとんど) に対してのみ 1 つの Unicode 文字に対応します。ただし、よりエキゾチックな (古典的な中国語などの) 文字は除きます) (*) . その場合にすべてのUnicode 文字の文字数を正しく取得したい場合は、Unicode 対応のライブラリ (ICU など) を使用するか、自分でコーディングする必要があります。

(*) @一二三が正しく指摘しているように、結合文字が使用されている場合、追加の問題があります。それらを正しくカウントすることも、適切なライブラリを使用して行うのが最善です。

于 2013-02-21T03:00:56.283 に答える
3

wchar_tエンティティの長さを知りたい場合は、 を使用しますmyStr.length()。Unicode コードポイントのサイズを知りたい場合は、それらをカウントする方法を知っているライブラリを見つける必要があります。自分で作成することもできます。UTF-16 としてエンコードされたコードポイントが 1 つまたは 2 つのエンティティを使用するかどうかを判断するルールはそれほど難しくありません。http://en.wikipedia.org/wiki/Utf-16を参照してください。wchar_t16 ビット (対 32 ビット)かどうかを知るには、 を使用しますsizeof(wchar_t) == 2

于 2013-02-21T03:01:55.940 に答える