Le codage en C++ est un peu compliqué. Voici ma compréhension de celui-ci.
Chaque mise en charge les caractères à partir de la source de base de jeu de caractères. Ces inclure des caractères communs énumérés dans le §2.2/1 (§2.3/1 en C++11). Ces caractères doivent tous tenir dans un seul char
. En outre implémentations ont à soutenir une façon de nommer les autres caractères à l'aide d'une méthode appelée universal-character-names
et ressembler \uffff
ou \Uffffffff
et peut être utilisé pour se référer à des caractères Unicode. Une partie d'entre eux sont utilisables dans les identificateurs (énumérés à l'Annexe E).
C'est tout beau, mais le mappage de caractères dans le fichier, à la source des caractères (utilisé au moment de la compilation) est définie par l'implémentation. Ceci constitue l'encodage utilisé. Voici ce qu'il dit littéralement (C++version 98):
Source physique de fichier caractères sont
mappé, la mise en œuvre définies
manière, à la source de base de caractère
set (introduction de caractères de nouvelle ligne
pour la fin d'indicateurs de ligne) si
nécessaire. Trigraph séquences (2.3)
sont remplacés par les correspondants
un seul caractère interne
des représentations. N'importe quel fichier source
caractère qui n'est pas dans la base source
jeu de caractères (2.2) est remplacé par le
universelle-personnage-nom qui des-
ignates de ce personnage. (Un
la mise en œuvre peut utiliser n'importe interne
l'encodage, aussi longtemps que la réelle
caractère étendu rencontrées dans la
fichier source, et la même étendue
caractère exprimé dans le fichier source
universelle-personnage-nom (c'est à dire
à l'aide de l' \uXXXX notation), sont
traités de manière équivalente.)
Pour gcc, vous pouvez la modifier en utilisant l'option -finput-charset=charset
. En outre, vous pouvez modifier l'exécution de caractère utilisé pour represet valeurs lors de l'exécution. La bonne option pour ce est - -fexec-charset=charset
pour char (la valeur par défaut est utf-8
) et -fwide-exec-charset=charset
(ce qui correspond par défaut à utf-16
ou utf-32
selon la taille de l' wchar_t
).