Heim  >  Artikel  >  Backend-Entwicklung  >  Wie berechnet man die tatsächliche Länge einer UTF-8-Zeichenfolge in C?

Wie berechnet man die tatsächliche Länge einer UTF-8-Zeichenfolge in C?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-26 01:26:28684Durchsuche

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

Zählen der tatsächlichen Länge von UTF-8-Strings

Bei der Arbeit mit UTF-8-codierten std::string-Objekten stoßen Entwickler häufig auf ein Diskrepanz zwischen dem von str.length() zurückgegebenen Wert und der tatsächlichen Anzahl der Zeichen in der Zeichenfolge. Dies liegt daran, dass str.length() einfach die Anzahl der Bytes in der Zeichenfolge zählt und nicht die Multibyte-Kodierung berücksichtigt, die zur Darstellung von UTF-8-Zeichen verwendet wird.

Die UTF-8-Kodierung definiert einen Satz von Bytesequenzen Wird zur Darstellung von Unicode-Zeichen verwendet. Jedes Zeichen kann je nach Unicode-Codepunkt durch ein bis vier Bytes dargestellt werden. Diese Bytesequenzen sind wie folgt aufgebaut:

  • 1-Byte-Sequenz (0x00-0x7F): Stellt ASCII-Zeichen direkt dar.
  • 2-Byte Sequenz (0x80-0xBF): Stellt Zeichen mit Codepunkten von 0x0080 bis 0x07FF dar.
  • 3-Byte-Sequenz (0xC0-0xDF): Stellt Zeichen mit Codepunkten von 0x0800 bis dar 0xFFFF.
  • 4-Byte-Sequenz (0xE0-0xFF): Stellt Zeichen mit Codepunkten von 0x10000 bis 0x10FFFF dar.

Berechnung der tatsächlichen Länge

Die tatsächliche Länge einer UTF-8-codierten Zeichenfolge kann durch Zählen der Anzahl der ersten Bytes in der Zeichenfolge ermittelt werden, bei denen es sich um die Bytes handelt, die nicht mit dem Muster 10xxxxxx übereinstimmen. Dieses Muster stellt Fortsetzungsbytes dar, die zur Darstellung von Mehrbyte-Sequenzen verwendet werden.

Codeausschnitt

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

In diesem Code iteriert die while-Schleife über die Zeichenfolge , wobei der Längenzähler für jedes erste Byte, auf das er trifft, um 1 erhöht wird.

Das obige ist der detaillierte Inhalt vonWie berechnet man die tatsächliche Länge einer UTF-8-Zeichenfolge in C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn