Rumah > pembangunan bahagian belakang > tutorial php > 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
Lepaskan: 2024-10-30 02:15:02
asal
987 orang telah melayarinya

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan