Maison  >  Article  >  développement back-end  >  Comment calculer la longueur réelle d’une chaîne UTF-8 en C ?

Comment calculer la longueur réelle d’une chaîne UTF-8 en C ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-26 01:26:28619parcourir

How to Calculate the Actual Length of a UTF-8 String in C  ?

Comptage de la longueur réelle des chaînes UTF-8

Lorsqu'ils travaillent avec des objets std::string codés en UTF-8, les développeurs rencontrent souvent un écart entre la valeur renvoyée par str.length() et le nombre réel de caractères dans la chaîne. En effet, str.length() compte simplement le nombre d'octets dans la chaîne, sans tenir compte du codage multi-octets utilisé pour représenter les caractères UTF-8.

Le codage UTF-8 définit un ensemble de séquences d'octets. utilisé pour représenter les caractères Unicode. Chaque caractère peut être représenté par un à quatre octets, selon son point de code Unicode. Ces séquences d'octets sont structurées comme suit :

  • Séquence de 1 octet (0x00-0x7F) : Représente directement les caractères ASCII.
  • 2 octets séquence (0x80-0xBF) : Représente les caractères avec des points de code de 0x0080 à 0x07FF.
  • Séquence de 3 octets (0xC0-0xDF) : Représente les caractères avec des points de code de 0x0800 à 0xFFFF.
  • Séquence de 4 octets (0xE0-0xFF) : Représente des caractères avec des points de code de 0x10000 à 0x10FFFF.

Calcul de la longueur réelle

La longueur réelle d'une chaîne codée en UTF-8 peut être déterminée en comptant le nombre de premiers octets de la chaîne, qui sont les octets qui ne correspondent pas au modèle 10xxxxxx. Ce modèle représente les octets de continuation, qui sont utilisés pour représenter des séquences de plusieurs octets.

Extrait de code

<code class="cpp">int len = 0;
while (*s) len += (*s++ & 0xc0) != 0x80;</code>

Dans ce code, la boucle while parcourt la chaîne , en incrémentant la longueur du nombre de len de 1 pour chaque premier octet rencontré.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn