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

Linda Hamilton
Lepaskan: 2024-10-27 20:43:30
asal
317 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!

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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!