ホームページ  >  記事  >  バックエンド開発  >  C で UTF-8 文字列の実際の長さを計算するにはどうすればよいですか?

C で UTF-8 文字列の実際の長さを計算するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-26 01:26:28619ブラウズ

How to Calculate the Actual Length of a UTF-8 String in C  ?

UTF-8 文字列の実際の長さをカウントする

UTF-8 でエンコードされた std::string オブジェクトを操作しているときに、開発者はよく次のような問題に遭遇します。 str.length() によって返される値と文字列内の実際の文字数との間の不一致。これは、str.length() が単に文字列内のバイト数をカウントし、UTF-8 文字を表すために使用されるマルチバイト エンコーディングを考慮していないためです。

UTF-8 エンコーディングはバイト シーケンスのセットを定義します。 Unicode 文字を表すために使用されます。各文字は、Unicode コード ポイントに応じて 1 ~ 4 バイトで表現できます。これらのバイト シーケンスは次のように構造化されています。

  • 1 バイト シーケンス (0x00-0x7F): ASCII 文字を直接表します。
  • 2 バイトシーケンス (0x80-0xBF): コード ポイント 0x0080 から 0x07FF までの文字を表します。
  • 3 バイト シーケンス (0xC0-0xDF): コード ポイント 0x0800 から 0x07FF までの文字を表します。 0xFFFF.
  • 4 バイト シーケンス (0xE0-0xFF): コード ポイント 0x10000 から 0x10FFFF の文字を表します。

実際の長さの計算

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。