Character sets and encodings
Diese Seite beschreibt mehrere Zeichensätze, die durch den C++-Standard spezifiziert sind.
ÜbersetzungszeichensatzDer Übersetzungszeichensatz besteht aus folgenden Elementen:
Der Übersetzungszeichensatz ist eine Obermenge des Basiszeichensatzes und des Basis-Literalzeichensatzes (siehe unten). |
(seit C++23) |
Basis-Zeichensatz
Der grundlegende Zeichensatz besteht aus den folgenden 96 (bis C++26) 99 (seit C++26) Zeichen:
| Codepoint | Zeichen | Glyphe |
|---|---|---|
| U+0009 | Tabulator | |
| U+000B | Zeilentabulator | |
| U+000C | Seitenvorschub (FF) | |
| U+0020 | Leerzeichen | |
| U+000A | Zeilenvorschub (LF) | neue Zeile |
| U+0021 | Ausrufezeichen |
!
|
| U+0022 | Anführungszeichen |
"
|
| U+0023 | Doppelkreuz |
#
|
| U+0025 | Prozentzeichen |
%
|
| U+0026 | Kaufmanns-Und |
&
|
| U+0027 | Apostroph |
'
|
| U+0028 | Linke Klammer |
(
|
| U+0029 | Rechte Klammer |
)
|
| U+002A | Sternchen |
*
|
| U+002B | Pluszeichen |
+
|
| U+002C | Komma |
,
|
| U+002D | Bindestrich-Minus |
-
|
| U+002E | Punkt |
.
|
| U+002F | Schrägstrich |
/
|
| U+0030 .. U+0039 | Ziffer null .. neun |
0 1 2 3 4 5 6 7 8 9
|
| U+003A | Doppelpunkt |
:
|
| U+003B | Semikolon |
;
|
| U+003C | Kleiner-als-Zeichen |
<
|
| U+003D | Gleichheitszeichen |
=
|
| U+003E | Größer-als-Zeichen |
>
|
| U+003F | Fragezeichen |
?
|
| U+0041 .. U+005A | Lateinischer Großbuchstabe A .. Z |
A B C D E F G H I J K L M
|
| U+005B | Linke eckige Klammer |
[
|
| U+005C | Backslash |
\
|
| U+005D | Rechte eckige Klammer |
]
|
| U+005E | Zirkumflex |
^
|
| U+005F | Unterstrich |
_
|
| U+0061 .. U+007A | Lateinischer Kleinbuchstabe a .. z |
a b c d e f g h i j k l m
|
| U+007B | Linke geschweifte Klammer |
{
|
| U+007C | Senkrechter Strich |
|
|
| U+007D | Rechte geschweifte Klammer |
}
|
| U+007E | Tilde |
~
|
|
Die folgenden Zeichen wurden seit C++26 zum Basiszeichensatz hinzugefügt:
|
(seit C++26) |
Basis-Zeichensatz für Literale
Der grundlegende Literal-Zeichensatz besteht aus allen Zeichen des Basis-Zeichensatzes, plus den folgenden Steuerzeichen:
| Codepoint | Zeichen |
|---|---|
| U+0000 | Null |
| U+0007 | Bell |
| U+0008 | Backspace |
| U+000D | Wagenrücklauf (CR) |
Ausführungszeichensatz
Der Ausführungszeichensatz und der Ausführungs-Breitzeichensatz sind Obermengen des grundlegenden Literalzeichensatzes. Die Kodierungen der Ausführungszeichensätze und die Mengen zusätzlicher Elemente (falls vorhanden) sind gebietsschemaspezifisch. Jedes Element des Ausführungs-Breitzeichensatzes muss als eineindeutige wchar_t Codeeinheit darstellbar sein.
Codeeinheit und Literal-Codierung
Eine Codeeinheit ist ein ganzzahliger Wert des Zeichentyps. Zeichen in einem Character-Literal außer einem Multicharacter- oder nicht kodierbaren Character-Literal oder in einem String-Literal werden als Sequenz von einer oder mehreren Codeeinheiten kodiert, wie durch das Encoding-Präfix bestimmt; dies wird als das jeweilige Literal-Encoding bezeichnet.
Eine Literalkodierung oder eine gebietsschemaspezifische Kodierung eines der Ausführungszeichensätze kodiert jedes Element des grundlegenden Literalzeichensatzes als einzelne Codeeinheit mit nicht-negativem Wert, verschieden von der Codeeinheit für jedes andere solche Element. Ein Zeichen, das nicht im grundlegenden Literalzeichensatz enthalten ist, kann mit mehr als einer Codeeinheit kodiert werden; der Wert einer solchen Codeeinheit kann derselbe sein wie der einer Codeeinheit für ein Element des grundlegenden Literalzeichensatzes. Die Kodierungen der Ausführungszeichensätze können unabhängig von jeder Literalkodierung sein.
Die gewöhnliche Literalkodierung ist die Kodierung, die auf ein gewöhnliches Zeichen- oder Zeichenkettenliteral angewendet wird. Die breite Literalkodierung ist die Kodierung, die auf ein breites Zeichen- oder Zeichenkettenliteral angewendet wird.
Das U+0000 NULL-Zeichen wird als Wert 0 codiert. Kein anderes Element des Übersetzungszeichensatzes wird mit einer Codeeinheit des Werts 0 codiert. Der Codeeinheitenwert jedes Dezimalziffernzeichens nach der Ziffer 0 (U+0030) soll um eins größer sein als der Wert des vorherigen. Die gewöhnlichen und breiten Literalcodierungen sind ansonsten implementierungsdefiniert.
Für ein UTF-8-, UTF-16- oder UTF-32-Literal wird der UCS-Skalarwert, der jedem Zeichen des Übersetzungszeichensatzes entspricht, wie in ISO/IEC 10646 für die jeweilige UCS-Kodierungsform spezifiziert kodiert.
Hinweise
Die Standardnamen einiger Zeichensätze wurden in C++23 über P2314R4 geändert.
| Neue Bezeichnung(en) | Alte Bezeichnung(en) |
|---|---|
| basic character set | basic source character set |
| basic literal character set |
basic execution character set
basic execution wide-character set |
Abbildung von Quelltextdatei (außer einer UTF-8-Quelltextdatei) (seit C++23) Zeichen auf den Basiszeichensatz (bis C++23) Übersetzungszeichensatz (seit C++23) während Übersetzungsphase 1 ist implementierungsdefiniert, daher ist eine Implementierung verpflichtet zu dokumentieren, wie die Basisquellzeichen in Quelltextdateien dargestellt werden.
Fehlerberichte
Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | Angewendet auf | Verhalten wie veröffentlicht | Korrektes Verhalten |
|---|---|---|---|
| CWG 788 | C++98 |
die Werte der Member der Ausführungs-Zeichensätze
waren implementierungsdefiniert, aber nicht lokalspezifisch |
sie sind lokalspezifisch |
| CWG 1796 | C++98 |
die Darstellung des Null-(Breit-)Zeichens im
grundlegenden Ausführungs-(Breit-)Zeichensatz hatte alle Bits null |
nur Wert muss null sein |
Siehe auch
| ASCII-Tabelle | |
|
C-Dokumentation
für
Zeichensätze und Kodierungen
|