Character sets and encodings
Cette page décrit plusieurs jeux de caractères spécifiés par la norme C++.
Jeu de caractères de traductionLe jeu de caractères de traduction est constitué des éléments suivants :
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
|
| 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
|
| 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 :
|
(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
|