Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah saya boleh menukar aksara dalam rentetan UTF-8 kepada titik kod UCS-2 yang sepadan?

Bagaimanakah saya boleh menukar aksara dalam rentetan UTF-8 kepada titik kod UCS-2 yang sepadan?

Barbara Streisand
Barbara Streisandasal
2024-10-30 02:15:02912semak imbas

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

Menukar Aksara kepada Titik Kod UCS-2 dalam Rentetan UTF-8

Soalan ini adalah tentang mendapatkan mata kod UCS-2 untuk rentetan UTF-8 yang diberikan. Tugasnya adalah untuk menukar aksara individu kepada titik kod UCS-2 yang sepadan, tanpa mengira bahasa atau kerumitan aksara.

Perwakilan Titik Kod UCS-2

Setiap titik kod UCS-2 disimpan dalam 1-4 bait, berdasarkan nilai titik kod:

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

Menentukan Kiraan Byte

untuk menentukan Kiraan Byte

watak, periksa bait pertama:
  • Ketua 0: aksara 1 bait
  • Ketua 110: aksara 2 bait
  • Ketua 1110: aksara 3 bait
  • Mendahului 11110: aksara 4-bait
  • Mendahului 10: Bukan bait permulaan aksara berbilang bait
  • Mendahului 11111: Aksara tidak sah

Contoh Kod C

Berikut ialah contoh kod C untuk menukar aksara UTF-8 kepada titik kod UCS-2:

<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>

Penyelesaian Alternatif

Anda juga boleh menggunakan perpustakaan sedia ada seperti iconv atau perpustakaan khusus untuk bahasa pengaturcaraan anda.

Atas ialah kandungan terperinci Bagaimanakah saya boleh menukar aksara dalam rentetan UTF-8 kepada titik kod UCS-2 yang sepadan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn