Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Menentukan Panjang Sebenar UTF-8 Encoded std::string dalam C ?

Bagaimana untuk Menentukan Panjang Sebenar UTF-8 Encoded std::string dalam C ?

Linda Hamilton
Lepaskan: 2024-10-27 20:43:30
asal
473 orang telah melayarinya

How to Determine the True Length of a UTF-8 Encoded std::string in C  ?

Menentukan Panjang Sebenar UTF-8 Encoded std::string

Dalam C , std::string ialah susunan aksara, setiap satu menduduki satu bait memori. Walau bagaimanapun, dalam kes pengekodan UTF-8, satu aksara boleh diwakili menggunakan urutan berbilang bait. Ini membawa kepada percanggahan antara panjang rentetan seperti yang dilaporkan oleh str.length() dan panjang sebenar dalam aksara.

Mengikut standard pengekodan aksara UTF-8, bait dikumpulkan ke dalam jujukan, dengan bait pertama yang menunjukkan panjang jujukan:

  • 0x00000000 - 0x0000007F: 1 bait
  • 0x00000080 - 0x000000000 - 0x0000007F: 1 bait
  • 0x00000080 - 0x000007FF: 2 bait
  • 0x00010000 - 0x001FFFFF: 4 bait

Untuk menentukan panjang sebenar std::string yang dikodkan UTF-8, anda boleh menggunakan pendekatan berikut:

  1. Lelaran melalui aksara rentetan mengikut aksara menggunakan operator *s.
  2. Untuk setiap aksara, semak sama ada bait pertama (menggunakan & operator) sepadan dengan corak bait sambungan (10xxxxxx).

Jika bait pertama tidak sepadan dengan corak kesinambungan, tambahkan kiraan panjang. Ini menunjukkan permulaan jujukan aksara baharu.

Berikut ialah contoh pelaksanaan:

<code class="c++">int len = 0;
while (*s) len += (*s++ & 0xc0) != 0x80;</code>
Salin selepas log masuk

Dengan mengikut pendekatan ini, anda boleh menentukan panjang sebenar std yang dikodkan UTF-8 dengan tepat: :rentetan, yang penting untuk pelbagai operasi, seperti pengiraan aksara, manipulasi rentetan dan penghuraian data.

Atas ialah kandungan terperinci Bagaimana untuk Menentukan Panjang Sebenar UTF-8 Encoded std::string dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan