moi étions confus un certain temps:Quel est le terme moderne actuel de « caractères multi-octets »
Confusion on Unicode and Multibyte Articles
Après avoir lu les commentaires par tous les contributeurs, plus:
en regardant un vieil article (Année 2001): http://www.hastingsresearch.com/net/04-unicode-limitations.shtml, qui parle de unicode:
étant une définition de caractère 16 bits permettant une theo total de plus de 65 000 caractères. Toutefois, les jeux de caractères complets du monde totalisent plus de 170 000 caractères.
et regardant l'article "moderne" actuel: http://en.wikipedia.org/wiki/Unicode
Les codages les plus couramment utilisés sont UTF-8 (qui utilise 1 octet pour tous les caractères ASCII , qui ont les mêmes valeurs de code comme dans le ASCII norme de codage, et jusqu'à 4 octets pour les autres caractères), l'UCS-2 désormais obsolète (qui utilise 2 octets pour tous caractères, mais ne comprend pas tous les caractères dans la sta Unicode ndard), et UTF-16 (qui étend UCS-2, en utilisant 4 octets pour coder les caractères manquants de UCS-2).
Il semble que dans les options de compilation dans VC2008, les options "Unicode" sous jeux de caractères signifie vraiment "Unicode codé en UCS-2" (ou UTF-16? Je ne suis pas sûr)
J'essaie de vérifier cela en exécutant le code suivant sous VC2008
#include <iostream>
int main()
{
// Use unicode encoded in UCS-2?
std::cout << sizeof(L"我爱你") << std::endl;
// Use unicode encoded in UCS-2?
std::cout << sizeof(L"abc") << std::endl;
getchar();
// Compiled using options Character Set : Use Unicode Character Set.
// print out 8, 8
// Compiled using options Character Set : Multi-byte Character Set.
// print out 8, 8
}
Il semble que lors de la compilation avec des options Set de caractères Unicode, le résultat correspond mon hypothèse.
Mais qu'en est-il du jeu de caractères multi-octets? Qu'est-ce que le jeu de caractères multi-octets signifie dans le monde "moderne" actuel? :)
MBCS ne veut rien dire. Aujourd'hui, nous avons Unicode. Tout ce que tu savais avant est parti (surtout). –
l'utilisation de la macro L oblige le compilateur à traiter les deux chaînes comme des "chaînes de caractères larges", ce qui donne un sens au résultat de (8, 8) que vous avez obtenu. Retrait du L donnera le résultat de (7, 4), selon Microsoft standard/shrug – YeenFei
@Pototoswatter: De quoi parlez-vous? Un littéral de chaîne a un type de tableau, dans ce cas 'wchar_t const [4]'. Quand vous en dérérez, le tableau se désintègre d'abord en 'wchar_t const *'.Le déréférencement qui à son tour vous donne un 'wchar_t const'. Ainsi, '* L" 123456789 "== L'1'' et' sizeof (* L "123456789") == sizeof (L'1 ') ' – MSalters