ホームページ  >  記事  >  バックエンド開発  >  UTF-8 文字列内の文字を対応する UCS-2 コード ポイントに変換するにはどうすればよいですか?

UTF-8 文字列内の文字を対応する UCS-2 コード ポイントに変換するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-10-30 02:15:02912ブラウズ

How can I convert characters in a UTF-8 string to their corresponding UCS-2 code points?

UTF-8 文字列の文字を UCS-2 コード ポイントに変換する

この質問は、指定された UTF-8 文字列の UCS-2 コード ポイントの取得についてです。タスクは、言語や文字の複雑さに関係なく、個々の文字を対応する UCS-2 コード ポイントに変換することです。

UCS-2 コード ポイント表現

各 UCS-2 コード ポイントは、コード ポイント値に基づいて 1 ~ 4 バイトで保存されます。

  • 1 バイト: 0xxxxxxx
  • 2 バイト: 110xxxxx 10xxxxxx
  • 3 バイト: 1110xxxx 10xxxxxx 10xxxxxx
  • 4 バイト: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

バイト数の決定

文字、最初のバイトを調べます:

  • 先頭 0: 1 バイト文字
  • 先頭 110: 2 バイト文字
  • 先頭 1110: 3 バイト文字
  • 先頭 11110: 4 バイト文字
  • 先頭 10: マルチバイト文字の先頭以外のバイト
  • 先頭 11111: 無効な文字

C コードの例

UTF-8 文字を UCS-2 コード ポイントに変換するサンプル C コードを次に示します。

<code class="c">wchar_t utf8_char_to_ucs2(const unsigned char *utf8)
{
  if(!(utf8[0] & 0x80))      // 0xxxxxxx
    return (wchar_t)utf8[0];
  else if((utf8[0] & 0xE0) == 0xC0)  // 110xxxxx
    return (wchar_t)(((utf8[0] & 0x1F) << 6) | (utf8[1] & 0x3F));
  else if((utf8[0] & 0xF0) == 0xE0)  // 1110xxxx
    return (wchar_t)(((utf8[0] & 0x0F) << 12) | ((utf8[1] & 0x3F) << 6) | (utf8[2] & 0x3F));
  else
    return ERROR;  // uh-oh, UCS-2 can't handle code points this high
}</code>

代替ソリューション

iconv などの既存のライブラリや、プログラミング言語の特定のライブラリを使用することもできます。

以上がUTF-8 文字列内の文字を対応する UCS-2 コード ポイントに変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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