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

C で UTF-8 でエンコードされた文字列の長さを正確に判断するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-10-26 05:58:02551ブラウズ

How to Accurately Determine the Length of a UTF-8 Encoded String in C  ?

UTF-8 でエンコードされた文字列の長さの決定

C では、 std::string エンコードが異なる場合があり、そこで length() 関数を使用します。 UTF-8 でエンコードされた文字列は、実際の長さが不正確になる可能性があります。正しい長さを確認するには、次のバイト シーケンス パターンを考慮してください:

0x00000000 - 0x0000007F:
       0xxxxxxx

0x00000080 - 0x000007FF:
       110xxxxx 10xxxxxx

0x00000800 - 0x0000FFFF:
       1110xxxx 10xxxxxx 10xxxxxx

0x00010000 - 0x001FFFFF:
       11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

UTF-8 でエンコードされた文字列の実際の長さを計算するには:

  1. 変数 len を 0 に初期化します。 .
  2. 文字列を 1 文字ずつ繰り返します。
  3. 各文字について、シングルバイト文字 (0xxxxxxx) のバイト シーケンス パターンに従っているかどうかを確認します。
  4. If
  5. そうでない場合は、現在と次のバイトをスキップします。

次のコード スニペットは実装を示しています。

<code class="cpp">int len = 0;
const char *s = str.c_str(); // convert to C-style string
while (*s) len += (*s++ & 0xc0) != 0x80;</code>

以上がC で UTF-8 でエンコードされた文字列の長さを正確に判断するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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