C++ 11 introduit un nouvel ensemble de préfixes littéraux de chaîne (et permet même des suffixes définis par l'utilisateur). En plus de cela, vous pouvez utiliser directement les séquences d'échappement Unicode pour coder un certain symbole sans avoir à vous soucier de l'encodage.Littéraux de chaîne Unicode
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 aussi bien? Cela semblerait être un défaut si ce n'était pas possible.
const wchar_t* sw = L"\u00DA";
La valeur entière de sw[0]
serait bien sûr dépendre de ce que wchar_t
est sur une plate-forme particulière, mais à tous les autres effets, cela devrait être portable, non?
Je crois que la valeur de 'sw [0]' 'dépend de ce que wchar_t' est sur une plate-forme particulière que dans la mesure de quelle est la taille de 'wchar_t'. C'est à dire. '\ u00DA' devrait toujours produire un encodage Unicode (UTF-8, UTF-16, UTF-32) de U + 00DA, même si ce n'est pas le codage normal de la plate-forme pour ce type. – bames53
En fait, ce qui précède est incorrect. L'implémentation est censée traiter les noms de caractères universels comme le ferait le caractère littéral. Donc, si l'implémentation traduit des caractères dans une chaîne de caractères littérale pour le jeu de caractères d'exécution, elle devrait le faire avec les UCN. Le codage UTF n'est garanti que si l'UCN se trouve dans un littéral Unicode (par exemple, u8 "\ u00DA"). – bames53