Null-terminierte Multibyte-Strings
Ein null-terminierter Multibyte-String (NTMBS) oder "Multibyte-String" ist eine Sequenz von Nicht-Null-Bytes, gefolgt von einem Byte mit dem Wert Null (dem terminierenden Nullzeichen).
Jedes Zeichen, das in dem String gespeichert ist, kann mehr als ein Byte belegen. Die Kodierung, die zur Darstellung von Zeichen in einem Multibyte-Zeichenstring verwendet wird, ist gebietsspezifisch (locale-spezifisch): Es kann UTF-8, GB18030, EUC-JP, Shift-JIS usw. sein. Zum Beispiel 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, kodiert in GB18030, ist das char-Array {'\xc4', '\xe3', '\xba', '\xc3', '\0'}, wobei jedes der beiden Zeichen als Zweibyte-Sequenz kodiert ist.
In einigen Multibyte-Kodierungen kann eine gegebene Multibyte-Zeichensequenz unterschiedliche Zeichen darstellen, abhängig von den vorherigen Byte-Sequenzen, bekannt als "Shift-Sequenzen". Solche Kodierungen werden als zustandsabhängig bezeichnet: Kenntnis des aktuellen Shift-Zustands ist erforderlich, um jedes Zeichen zu interpretieren. Ein NTMBS ist nur gültig, wenn er im anfänglichen Shift-Zustand beginnt und endet: Wenn eine Shift-Sequenz verwendet wurde, muss die entsprechende Unshift-Sequenz vor dem terminierenden Nullzeichen vorhanden sein. Beispiele für solche Kodierungen sind das 7-Bit-JIS, BOCU-1 und SCSU.
Ein Multibyte-Zeichenstring ist layout-kompatibel mit einem null-terminierten Byte-String (NTBS), d.h. er kann mit denselben Mitteln gespeichert, kopiert und untersucht werden, außer bei der Berechnung der Anzahl der Zeichen. Wenn die korrekte Locale aktiv ist, verarbeiten auch I/O-Funktionen Multibyte-Strings. Multibyte-Strings können mit den std::codecvt-Memberfunktionen, std::wstring_convert oder den folgenden gebietsspezifischen Konvertierungsfunktionen in und aus Wide-Strings konvertiert werden.
Inhalt |
[bearbeiten] Funktionen
Multibyte/Wide-Zeichenkonvertierungen | |
| Definiert in Header
<cstdlib> | |
| gibt die Anzahl der Bytes im nächsten Multibyte-Zeichen zurück (Funktion) | |
| konvertiert das nächste Multibyte-Zeichen in ein Wide-Zeichen (Funktion) | |
| konvertiert ein Wide-Zeichen in seine Multibyte-Darstellung (Funktion) | |
| konvertiert einen schmalen Multibyte-Zeichenstring in einen Wide-String (Funktion) | |
| konvertiert einen Wide-String in einen schmalen Multibyte-Zeichenstring (Funktion) | |
| Definiert in Header
<cwchar> | |
| gibt die Anzahl der Bytes im nächsten Multibyte-Zeichen zurück, gegeben den Zustand (Funktion) | |
| prüft, ob das std::mbstate_t-Objekt den anfänglichen Shift-Zustand repräsentiert (Funktion) | |
| erweitert ein ein Byte breites schmales Zeichen zu einem Wide-Zeichen, falls möglich (Funktion) | |
| verengt ein Wide-Zeichen zu einem ein Byte breiten schmalen Zeichen, falls möglich (Funktion) | |
| konvertiert das nächste Multibyte-Zeichen in ein Wide-Zeichen, gegeben den Zustand (Funktion) | |
| konvertiert ein Wide-Zeichen in seine Multibyte-Darstellung, gegeben den Zustand (Funktion) | |
| konvertiert einen schmalen Multibyte-Zeichenstring in einen Wide-String, gegeben den Zustand (Funktion) | |
| konvertiert einen Wide-String in einen schmalen Multibyte-Zeichenstring, gegeben den Zustand (Funktion) | |
| Definiert in Header
<cuchar> | |
| (C++20) |
konvertiert ein schmales Multibyte-Zeichen in UTF-8-Kodierung (Funktion) |
| (C++20) |
konvertiert einen UTF-8-String in eine schmale Multibyte-Kodierung (Funktion) |
| (C++11) |
konvertiert ein schmales Multibyte-Zeichen in UTF-16-Kodierung (Funktion) |
| (C++11) |
konvertiert ein UTF-16-Zeichen in eine schmale Multibyte-Kodierung (Funktion) |
| (C++11) |
konvertiert ein schmales Multibyte-Zeichen in UTF-32-Kodierung (Funktion) |
| (C++11) |
konvertiert ein UTF-32-Zeichen in eine schmale Multibyte-Kodierung (Funktion) |
[bearbeiten] Typen
| Definiert in Header
<cwchar> | |
| Konvertierungsinformationen, die zum Iterieren über Multibyte-Zeichenstrings benötigt werden (Klasse) | |
[bearbeiten] Makros
| Definiert in Header
<climits> | |
| MB_LEN_MAX |
maximale Anzahl von Bytes in einem Multibyte-Zeichen (Makro-Konstante) |
| Definiert in Header
<cstdlib> | |
| MB_CUR_MAX |
maximale Anzahl von Bytes in einem Multibyte-Zeichen in der aktuellen C-Locale (Makro-Variable) |
| Definiert in Header
<cuchar> | |
| __STDC_UTF_16__ (C++11) |
zeigt an, dass UTF-16-Kodierung von mbrtoc16 und c16rtomb verwendet wird (Makro-Konstante) |
| __STDC_UTF_32__ (C++11) |
zeigt an, dass UTF-32-Kodierung von mbrtoc32 und c32rtomb verwendet wird (Makro-Konstante) |
[bearbeiten] Siehe auch
| C-Dokumentation für Null-terminierte Multibyte-Strings
|