que solía ser confuso bastante tiempo:¿Cuál es el actual término moderno para "multi-byte Set"
Confusion on Unicode and Multibyte Articles
Después de leer los comentarios de todos los contribuyentes, además de:
en cuanto a un artículo de edad (año 2001): http://www.hastingsresearch.com/net/04-unicode-limitations.shtml, que hablan de unicode:
ser una definición de caracteres de 16 bits que permite una teo total de más de 65,000 caracteres. Sin embargo, los juegos completos de caracteres del mundo suman más de 170,000 caracteres.
y Mirando actual artículo "moderna": http://en.wikipedia.org/wiki/Unicode
Las codificaciones más utilizadas son UTF-8 (que utiliza 1 byte para todos caracteres ASCII, que tienen las mismas valores de código como en el estándar ASCII codificación, y hasta 4 bytes para otros caracteres), la ahora obsoleta UCS-2 (que utiliza 2 bytes para todos los caracteres, pero no incluye todos los carácter en el sta Unicode ndard), y UTF-16 (que extiende UCS-2, usando 4 bytes para codificar los caracteres que faltan de UCS-2).
Parece ser que en las opciones de compilación en VC2008, las opciones "Unicode" bajo Juegos de caracteres realmente significa "codificados con Unicode en UCS-2" (o UTF-16? No estoy seguro)
intenta verificar esto ejecutando el código siguiente bajo 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
}
parece que durante la compilación con opciones Set de caracteres Unicode, el resultado coincide con mi suposición.
Pero, ¿qué pasa con Multi-byte Character Set? ¿Qué significa Conjunto de caracteres multibyte en el mundo actual "moderno"? :)
MBCS no significa nada. Hoy tenemos Unicode. Todo lo que sabías antes se ha ido (sobre todo). –
el uso de la macro L provoca que el compilador trate ambas cadenas como "cadena de caracteres anchos", de ahí que tenga sentido para el resultado de (8, 8) que obtuvo. La eliminación de la L dará el resultado de (7, 4), según el estándar/encogimiento de hombros de Microsoft – YeenFei
@Pototoswatter: ¿De qué estás hablando? Un literal de cadena tiene un tipo de matriz, en este caso 'wchar_t const [4]'. Cuando desreferencia eso, la matriz decae primero en un 'wchar_t const *'.Desreferenciando eso a su vez te da un 'wchar_t const'. Por lo tanto, '* L" 123456789 "== L'1'' y' sizeof (* L "123456789") == sizeof (L'1 ') ' – MSalters