Null-terminated multibyte strings
Eine nullterminierte Multibytestring (NTMBS), oder "Multibytestring", ist eine Folge von Bytes ungleich Null, gefolgt von einem Byte mit dem Wert Null (dem abschließenden Nullzeichen).
Jedes im String gespeicherte Zeichen kann mehr als ein Byte belegen. Die zur Darstellung von Zeichen in einer Multibyte-Zeichenkette verwendete Kodierung ist localespezifisch: Es kann sich um UTF-8, GB18030, EUC-JP, Shift-JIS usw. handeln. Beispielsweise ist das char-Array { ' \xe4 ' , ' \xbd ' , ' \xa0 ' , ' \xe5 ' , ' \xa5 ' , ' \xbd ' , ' \0 ' } ein NTMBS, das den String "你好" in UTF-8-Multibyte-Kodierung enthält: Die ersten drei Bytes kodieren das Zeichen 你, die nächsten drei Bytes kodieren das Zeichen 好. Derselbe String in GB18030 kodiert ist das char-Array { ' \xc4 ' , ' \xe3 ' , ' \xba ' , ' \xc3 ' , ' \0 ' } , wobei jedes der beiden Zeichen als Zwei-Byte-Sequenz kodiert ist.
In einigen Multibyte-Kodierungen kann jede gegebene Multibyte-Zeichensequenz je nach vorherigen Byte-Sequenzen unterschiedliche Zeichen darstellen, bekannt als "Shift-Sequenzen". Solche Kodierungen werden als zustandsabhängig bezeichnet: Zur Interpretation jedes Zeichens ist die Kenntnis des aktuellen Shift-Zustands erforderlich. Ein NTMBS ist nur gültig, wenn es im initialen Shift-Zustand beginnt und endet: Wenn eine Shift-Sequenz verwendet wurde, muss die entsprechende Unshift-Sequenz vor dem abschließenden Nullzeichen vorhanden sein. Beispiele für solche Kodierungen sind 7-Bit-JIS, BOCU-1 und SCSU .
Ein Multibyte-Zeichenstring ist layoutkompatibel mit einem nullterminierten Byte-String (NTBS), das heißt, er kann mit denselben Mitteln gespeichert, kopiert und untersucht werden, außer bei der Berechnung der Zeichenanzahl. Wenn das korrekte Locale aktiv ist, verarbeiten E/A-Funktionen auch Multibyte-Strings. Multibyte-Strings können mit den std::codecvt -Memberfunktionen, std::wstring_convert oder den folgenden localespezifischen Konvertierungsfunktionen in Wide-Strings umgewandelt werden und umgekehrt:
Inhaltsverzeichnis |
Funktionen
Multibyte-/Breitzeichen-Konvertierungen |
|
|
Definiert im Header
<cstdlib>
|
|
|
gibt die Anzahl Bytes im nächsten Multibyte-Zeichen zurück
(Funktion) |
|
|
konvertiert das nächste Multibyte-Zeichen zu einem Breitzeichen
(Funktion) |
|
|
konvertiert ein Breitzeichen zu seiner Multibyte-Darstellung
(Funktion) |
|
|
konvertiert eine schmale Multibyte-Zeichenkette zu einer Breitzeichen-Zeichenkette
(Funktion) |
|
|
konvertiert eine Breitzeichen-Zeichenkette zu einer schmalen Multibyte-Zeichenkette
(Funktion) |
|
|
Definiert im Header
<cwchar>
|
|
|
gibt die Anzahl Bytes im nächsten Multibyte-Zeichen zurück, mit Zustand
(Funktion) |
|
|
prüft, ob das
std::mbstate_t
Objekt den initialen Shift-Zustand repräsentiert
(Funktion) |
|
|
erweitert ein Einzelbyte-Schmalzeichen zu einem Breitzeichen, falls möglich
(Funktion) |
|
|
verengt ein Breitzeichen zu einem Einzelbyte-Schmalzeichen, falls möglich
(Funktion) |
|
|
konvertiert das nächste Multibyte-Zeichen zu einem Breitzeichen, mit Zustand
(Funktion) |
|
|
konvertiert ein Breitzeichen zu seiner Multibyte-Darstellung, mit Zustand
(Funktion) |
|
|
konvertiert eine schmale Multibyte-Zeichenkette zu einer Breitzeichen-Zeichenkette, mit Zustand
(Funktion) |
|
|
konvertiert eine Breitzeichen-Zeichenkette zu einer schmalen Multibyte-Zeichenkette, mit Zustand
(Funktion) |
|
|
Definiert im Header
<cuchar>
|
|
|
(C++20)
|
konvertiert ein schmales Multibyte-Zeichen zu UTF-8-Kodierung
(Funktion) |
|
(C++20)
|
konvertiert eine UTF-8-Zeichenkette zu schmaler Multibyte-Kodierung
(Funktion) |
|
(C++11)
|
konvertiert ein schmales Multibyte-Zeichen zu UTF-16-Kodierung
(Funktion) |
|
(C++11)
|
konvertiert ein UTF-16-Zeichen zu schmaler Multibyte-Kodierung
(Funktion) |
|
(C++11)
|
konvertiert ein schmales Multibyte-Zeichen zu UTF-32-Kodierung
(Funktion) |
|
(C++11)
|
konvertiert ein UTF-32-Zeichen zu schmaler Multibyte-Kodierung
(Funktion) |
Typen
|
Definiert im Header
<cwchar>
|
|
|
Konvertierungsstatusinformationen, die zum Iterieren von Multibyte-Zeichenketten erforderlich sind
(Klasse) |
|
Makros
|
Definiert im Header
<climits>
|
|
|
MB_LEN_MAX
|
Maximale Anzahl von Bytes in einem Multibyte-Zeichen
(Makrokonstante) |
|
Definiert im Header
<cstdlib>
|
|
|
MB_CUR_MAX
|
Maximale Anzahl von Bytes in einem Multibyte-Zeichen im aktuellen C-Locale
(Makrovariable) |
|
Definiert im Header
<cuchar>
|
|
|
__STDC_UTF_16__
(C++11)
|
Zeigt an, dass UTF-16-Kodierung von mbrtoc16 und c16rtomb verwendet wird
(Makrokonstante) |
|
__STDC_UTF_32__
(C++11)
|
Zeigt an, dass UTF-32-Kodierung von mbrtoc32 und c32rtomb verwendet wird
(Makrokonstante) |
Siehe auch
|
C-Dokumentation
für
Null-terminierte Multibyte-Zeichenketten
|