Namespaces
Variants

Character sets and encodings

From cppreference.net
C++ language
General topics
Flow control
Conditional execution statements
Iteration statements (loops)
Jump statements
Functions
Function declaration
Lambda function expression
inline specifier
Dynamic exception specifications ( until C++17* )
noexcept specifier (C++11)
Exceptions
Namespaces
Types
Specifiers
constexpr (C++11)
consteval (C++20)
constinit (C++20)
Storage duration specifiers
Initialization
Expressions
Alternative representations
Literals
Boolean - Integer - Floating-point
Character - String - nullptr (C++11)
User-defined (C++11)
Utilities
Attributes (C++11)
Types
typedef declaration
Type alias declaration (C++11)
Casts
Memory allocation
Classes
Class-specific function properties
Special member functions
Templates
Miscellaneous

Cette page décrit plusieurs jeux de caractères spécifiés par la norme C++.

Table des matières

Jeu de caractères de traduction

Le jeu de caractères de traduction est constitué des éléments suivants :

  • chaque caractère abstrait auquel est attribué un point de code dans l'espace de codage Unicode , et
  • un caractère distinct pour chaque valeur scalaire Unicode non attribuée à un caractère abstrait.

Le jeu de caractères de traduction est un sur-ensemble du jeu de caractères de base et du jeu de caractères littéral de base (voir ci-dessous).

(depuis C++23)

Jeu de caractères de base

Le jeu de caractères de base est constitué des 96 (jusqu'à C++26) 99 (depuis C++26) caractères suivants :

Point de code Caractère Glyphe
U+0009 Tabulation de caractère
U+000B Tabulation de ligne
U+000C Saut de page (FF)
U+0020 Espace
U+000A Saut de ligne (LF) new-line
U+0021 Point d'exclamation !
U+0022 Guillemet "
U+0023 Croisillon #
U+0025 Signe pourcent %
U+0026 Esperluette &
U+0027 Apostrophe '
U+0028 Parenthèse gauche (
U+0029 Parenthèse droite )
U+002A Astérisque *
U+002B Signe plus +
U+002C Virgule ,
U+002D Trait d'union moins -
U+002E Point .
U+002F Barre oblique /
U+0030 .. U+0039 Chiffre zéro .. neuf 0 1 2 3 4 5 6 7 8 9
U+003A Deux-points :
U+003B Point-virgule ;
U+003C Signe inférieur à <
U+003D Signe égal =
U+003E Signe supérieur à >
U+003F Point d'interrogation ?
U+0041 .. U+005A Lettre majuscule latine A .. Z A B C D E F G H I J K L M

N O P Q R S T U V W X Y Z

U+005B Crochet gauche [
U+005C Barre oblique inverse \
U+005D Crochet droit ]
U+005E Accent circonflexe ^
U+005F Trait bas _
U+0061 .. U+007A Lettre minuscule latine a .. z a b c d e f g h i j k l m

n o p q r s t u v w x y z

U+007B Accolade gauche {
U+007C Barre verticale |
U+007D Accolade droite }
U+007E Tilde ~

Les caractères suivants sont ajoutés au jeu de caractères de base depuis C++26 :

Point de code Caractère Glyphe
U+0024 Signe dollar $
U+0040 Arobase @
U+0060 Accent grave `
(depuis C++26)

Jeu de caractères littéral de base

Le jeu de caractères littéraux de base est constitué de tous les caractères du jeu de caractères de base, plus les caractères de contrôle suivants :

Point de code Caractère
U+0000 Nul
U+0007 Sonnerie
U+0008 Retour arrière
U+000D Retour chariot (CR)

Jeu de caractères d'exécution

L'ensemble de caractères d'exécution et l'ensemble de caractères larges d'exécution sont des sur-ensembles de l'ensemble de caractères littéraux de base. Les encodages des ensembles de caractères d'exécution et les ensembles d'éléments supplémentaires (le cas échéant) sont spécifiques aux paramètres régionaux. Chaque élément de l'ensemble de caractères larges d'exécution doit être représentable comme une unité de code distincte wchar_t .

Unité de code et encodage littéral

Une unité de code est une valeur entière de type caractère. Les caractères dans un littéral de caractère autre qu'un littéral de caractère multicaractère ou non encodable, ou dans un littéral de chaîne sont encodés comme une séquence d'une ou plusieurs unités de code, comme déterminé par le préfixe d'encodage ; ceci est appelé l' encodage littéral respectif.

Un encodage littéral ou un encodage spécifique à la locale de l'un des jeux de caractères d'exécution encode chaque élément du jeu de caractères littéral de base comme une unité de code unique avec une valeur non négative, distincte de l'unité de code pour tout autre élément de ce type. Un caractère n'appartenant pas au jeu de caractères littéral de base peut être encodé avec plus d'une unité de code ; la valeur d'une telle unité de code peut être identique à celle d'une unité de code pour un élément du jeu de caractères littéral de base. Les encodages des jeux de caractères d'exécution peuvent être sans rapport avec tout encodage littéral.

L'encodage littéral ordinaire est l'encodage appliqué à un caractère ou une chaîne littérale ordinaire. L'encodage littéral large est l'encodage appliqué à un caractère ou une chaîne littérale large.

Le caractère NULL U+0000 est encodé comme la valeur 0. Aucun autre élément du jeu de caractères de traduction n'est encodé avec une unité de code de valeur 0. La valeur d'unité de code de chaque caractère de chiffre décimal après le chiffre 0 (U+0030) doit être supérieure d'une unité à la valeur du précédent. Les encodages de littéraux ordinaires et larges sont par ailleurs définis par l'implémentation.

Pour un littéral UTF-8, UTF-16 ou UTF-32, la valeur scalaire UCS correspondant à chaque caractère du jeu de caractères de traduction est encodée comme spécifié dans l'ISO/CEI 10646 pour la forme d'encodage UCS respective.

Notes

Les noms standard de certains jeux de caractères sont modifiés en C++23 via P2314R4 .

Nouveau(x) nom(s) Ancien(s) nom(s)
basic character set basic source character set
basic literal character set basic execution character set
basic execution wide-character set

Mappage des caractères du fichier source (autre qu'un fichier source UTF-8) (depuis C++23) vers le jeu de caractères de base (jusqu'à C++23) jeu de caractères de traduction (depuis C++23) pendant la phase de traduction 1 est défini par l'implémentation, donc une implémentation doit documenter comment les caractères source de base sont représentés dans les fichiers source.

Rapports de défauts

Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.

DR Applied to Behavior as published Correct behavior
CWG 788 C++98 les valeurs des membres des jeux de caractères d'exécution
étaient définies par l'implémentation, mais n'étaient pas spécifiques aux paramètres régionaux
elles sont spécifiques aux paramètres régionaux
CWG 1796 C++98 la représentation du caractère nul (large) dans
le jeu de caractères (large) d'exécution de base avait tous les bits à zéro
seule la valeur zéro est requise

Voir aussi

Table ASCII
Documentation C pour Jeux de caractères et encodages