2010-03-10 15 views
5

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"? :)

+0

MBCS no significa nada. Hoy tenemos Unicode. Todo lo que sabías antes se ha ido (sobre todo). –

+0

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

+0

@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

Respuesta

6

http://en.wikipedia.org/wiki/Multi-byte_character_set

MBCS es un término utilizado para referirse a una clase de codificación de caracteres con caracteres que no se pueden representar con un solo byte, por lo tanto, el conjunto de caracteres de varios bytes. Para decodificar correctamente una cadena en este formato, necesita una página de códigos que le indique varias combinaciones de bytes correlacionar con caracteres. ISO/IEC 8859 define un conjunto de estándares MBCS, pero según Wikipedia, ISO dejó de mantenerlos en 2004, presumiblemente para centrarse en Unicode.

Supongo que el término moderno para MBCS es "obsoleto a favor de Unicode".

+0

+1. MBCS es un conjunto específico de codificaciones, por lo que no significa el caso más general de "usar más de un byte por carácter". Unicode, UTF8 y UTF16 no son "MBCS", aunque están codificados en múltiples bytes por carácter. –

0

multi-byte significa que un caracter se almacena en más de un byte.

extracto de Wikipedia en utf8:

UTF-8 codifica cada carácter (código punto) en 1 a 4 octetos (8 bits bytes), con la sola codificación octeto utilizado sólo para la 128 caracteres US-ASCII.

esencialmente, utf8 es un juego de caracteres de varios bytes :-).

+0

Pero, si lee desde http://msdn.microsoft.com/en-us/library/ey142t48%28VS.71%29.aspx#_core_mfc_support_for_mbcs_strings, los caracteres de varios bytes requieren "página de códigos". pero, UTF-8 no requiere página de códigos. –

+0

de wp: "UTF-8 hace que sea más fácil para un programa identificar los tres tipos de unidades, ya que se mantienen separadas. Las codificaciones de ancho variable antiguas generalmente no están tan bien diseñadas, ya que en ellas las unidades de camino y líder pueden usar mismos valores, y en algunos los tres tipos utilizan valores superpuestos ". mi interpretación: los juegos de caracteres más antiguos necesitan páginas de códigos, utf8 fue diseñado para no necesitarlo. "Unicode ha convertido las páginas de códigos en obsoletas al admitir más idiomas y caracteres de manera más consistente" –

+0

, entonces, ¿esto significa que no podemos decir que UTF8 = el carácter de múltiples bytes de Microsoft? :) –

0

Juego de caracteres de múltiples bytes es un término general para cualquier esquema de codificación que puede usar más de 1 byte para codificar un carácter.

Cuando escuche el término, normalmente esperaría que se refiriera a uno de los conjuntos de caracteres heredados más antiguos como en "IBM EBCDIC cp1390 - Kanji japonés Multi Byte".

Todos los esquemas UNICODE son técnicamente MBCS, pero es de esperar que se los denomine colectivamente "UNICODE" colectivamente o utf-8, utf-16 o utf-32 específicamente.

El único software "actual" que usa un juego de caracteres MBCS es el conjunto de aplicaciones de Microsoft Office. Que usa el "Windows MBCS". Esto es casi idéntico a utf-16 aparte de algunas diferencias menores. Debido a la temprana adopción de Microsofts, el borrador de la norma algunas piezas pequeñas de la norma completa resultaron difíciles de implementar, por lo que se mantuvo con el término "Windows MBCS".

0

En MSVC, las opciones "Unicode" en Conjuntos de caracteres significa que _T("X") se expande a L"X". Si se establece en MBCS, _T("X") se expande a solo "X".

Otra consecuencia es si el Win32 macro MessageBox() se expande a MessageBoxW() o MessageBoxA, así como macros para todas las demás funciones de Win32 que vienen en W pares A /.

+0

pero eso no dice nada sobre las codificaciones utilizadas – jalf

+0

@jalf: Es cierto. Esto se aplica a la configuración IDE, la interpretación del compilador de cadenas y la opción de función A/W. En los tres casos, la distinción es booleana y la codificación MBCS no especificada. – MSalters

0

Parece ser que en las opciones de compilación en VC2008, las opciones "Unicode" en virtud de los juegos de caracteres en realidad significa "codificados con Unicode en UCS-2" (o UTF-16? No estoy seguro)

Utiliza codificación Unicode en Utf-16 LE. El artículo de Wikipedia al que me enlace tiene una nota sobre ese efecto.

Pero, ¿qué ocurre con Multi-byte Character Set? ¿Qué significa Conjunto de caracteres multibyte en el mundo actual "moderno"? :)

MBCS es principalmente used in the MSDN documentation to mean DBCS. Esto es explained in more detail in this blog post. Si desea evitar confusiones, puede decir "Página de códigos de MBCS".

Cuestiones relacionadas