Maison >développement back-end >C++ >Comment déterminer la longueur réelle des chaînes codées en UTF-8 en C ?

Comment déterminer la longueur réelle des chaînes codées en UTF-8 en C ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-28 17:15:02576parcourir

 How to Determine the Actual Length of UTF-8 Encoded Strings in C  ?

Détermination de la longueur réelle des chaînes codées en UTF-8 en C

UTF-8 est un schéma de codage de caractères à largeur variable, ce qui signifie que la longueur d'une chaîne en octets ne correspond pas forcément au nombre de caractères qu'elle contient. Cela peut poser un problème lorsque vous travaillez avec des chaînes UTF-8 en C, car la méthode str.length() renvoie le nombre d'octets dans la chaîne, et non le nombre de caractères.

Pour déterminer avec précision la longueur de une chaîne codée en UTF-8 en C , vous pouvez utiliser l'approche suivante :

Comptez le nombre de premiers octets dans la chaîne. Les premiers octets sont des octets qui ne correspondent pas à 10xxxxxx, car ces octets indiquent le début de séquences de caractères multi-octets.

Voici un exemple d'implémentation :

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

Dans ce code, le Le pointeur s parcourt la chaîne et l'opération & 0xc0 masque les deux premiers bits de chaque octet. Si les deux premiers bits sont 0b10 (indiquant un octet de continuation), le compte n'est pas incrémenté. Sinon, il est incrémenté et le pointeur avance jusqu'à l'octet suivant. Ce processus se poursuit jusqu'à ce que la fin de la chaîne soit atteinte, moment auquel len contiendra la longueur réelle des caractères de la chaîne.

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