ho usato per essere confusione un po 'di tempo:Qual è l'attuale termine moderno per "Multi-Byte Character Set"
Confusion on Unicode and Multibyte Articles
Dopo aver letto i commenti da tutti i contribuenti, oltre a:
guardando un vecchio articolo (Anno 2001): http://www.hastingsresearch.com/net/04-unicode-limitations.shtml, che parla di unicode:
essere una definizione di carattere a 16 bit permettendo una teo totale retical di oltre 65.000 caratteri. Tuttavia, i set di caratteri completi del mondo sommano fino a oltre 170.000 caratteri.
e Guardando attuale articolo "moderna": http://en.wikipedia.org/wiki/Unicode
Le codifiche più comunemente usati sono UTF-8 (che utilizza 1 byte per tutti i caratteri ASCII, che hanno gli stessi valori di codice come nella codifica ASCII standard e fino a 4 byte per altri caratteri ), l'ormai obsoleto UCS-2 (che utilizza 2 byte per tutti i caratteri , ma non include tutti i caratteri nello sta Unicode ndard), e UTF-16 (che estende UCS-2, utilizzando 4 byte per codificare i caratteri mancanti da UCS-2).
Sembra che nelle opzioni di compilazione in VC2008, le opzioni "Unicode" sotto i set di caratteri in realtà significa "Unicode codificato in UCS-2" (o UTF-16? Non sono sicuro)
cerco di verificare questo eseguendo il seguente codice sotto 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
}
sembra che durante la compilazione con le opzioni di set di caratteri Unicode, il risultato ha trovato la mia ipotesi.
Ma che dire di set di caratteri multi-byte? Che cosa significa Set di caratteri multi-byte nel mondo "moderno" attuale? :)
MBCS significa nulla. Oggi abbiamo Unicode. Tutto quello che sapevi prima è sparito (soprattutto). –
l'uso della macro L fa sì che il compilatore tratti entrambe le stringhe come "stringa di caratteri estesa", quindi ha senso per il risultato di (8, 8) ottenuto. La rimozione di L darà il risultato di (7, 4), come da Microsoft standard/scrollata di spalle – YeenFei
@Pototoswatter: Di cosa stai parlando? Un letterale stringa ha un tipo di matrice, in questo caso 'wchar_t const [4]'. Quando lo si dereferenzia, l'array prima decade in un 'wchar_t const *'.Dereferenziazione che a sua volta ti dà un 'wchar_t const'. Quindi, '* L" 123456789 "== L'1'' e' sizeof (* L "123456789") == sizeof (L'1 ') ' – MSalters