UTF-8 文字列の実際の長さをカウントする
UTF-8 でエンコードされた std::string オブジェクトを操作しているときに、開発者はよく次のような問題に遭遇します。 str.length() によって返される値と文字列内の実際の文字数との間の不一致。これは、str.length() が単に文字列内のバイト数をカウントし、UTF-8 文字を表すために使用されるマルチバイト エンコーディングを考慮していないためです。
UTF-8 エンコーディングはバイト シーケンスのセットを定義します。 Unicode 文字を表すために使用されます。各文字は、Unicode コード ポイントに応じて 1 ~ 4 バイトで表現できます。これらのバイト シーケンスは次のように構造化されています。
実際の長さの計算
UTF-8 でエンコードされた文字列の実際の長さは、文字列内の最初のバイト (パターン 10xxxxxx に一致しないバイト) の数をカウントすることで判断できます。このパターンは、複数バイトのシーケンスを表すために使用される継続バイトを表します。
コード スニペット
<code class="cpp">int len = 0; while (*s) len += (*s++ & 0xc0) != 0x80;</code>
このコードでは、while ループが文字列を反復処理します。 、最初のバイトが検出されるたびに長さ len count が 1 ずつ増加します。
以上がC で UTF-8 文字列の実際の長さを計算するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。