Littéraux de chaîne Unicode
C++11 introduit un nouveau jeu de littéral de chaîne de préfixes (et permet même à l'utilisateur défini par l'suffixes). En plus de cela, vous pouvez directement utiliser les séquences d'échappement Unicode code un certain symbole, sans avoir à vous soucier de l'encodage.
const char16_t* s16 = u"\u00DA";
const char32_t* s32 = U"\u00DA";
Mais puis-je utiliser les séquences d'échappement unicode dans wchar_t
littéraux de chaîne? Il semblerait que ce soit un défaut si ce n'était pas possible.
const wchar_t* sw = L"\u00DA";
La valeur de l'entier de sw[0]
dépendra bien sûr de ce que wchar_t
est sur une plate-forme en particulier, mais à tous les autres effets, ce doit être portable, non?
source d'informationauteur rubenvb
Vous devez vous connecter pour publier un commentaire.
Cela pourrait fonctionner, mais il peut ne pas avoir souhaité la sémantique.
\u00DA
va se développer sur autant de cibles de caractères que nécessaire pour de l'utf-8/16/32 encodage selon la taille dewchar_t
mais gardez à l'esprit que les chaînes n'ont pas toutes documentées, de la garantie de l'encodage sémantique -- ils sont tout simplement "le système de codage", ne tente pas de dire ce qui est, ou demander à l'utilisateur de savoir ce que c'est.Il est donc préférable de ne pas mélanger et assortir. Utiliser une, mais pas les deux, des deux:
spécifiques à un système d':
char*
/""
wchar_t*
/L""
\x
-les littéraux,mbstowcs
/wcstombs
Unicode:
char*
/u8""
char16_t*
/u""
char32_t*
/U""
\u
/\U
les littéraux.(Voici quelques liées questions de la mine sur le sujet.)