2010-03-10 16 views
5

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

+0

MBCS significa nulla. Oggi abbiamo Unicode. Tutto quello che sapevi prima è sparito (soprattutto). –

+0

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

+0

@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

risposta

6

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

MBCS è un termine utilizzato per indicare una classe di codifica dei caratteri con caratteri che non possono essere rappresentati con un singolo byte, quindi set di caratteri multi-byte. Per decodificare correttamente una stringa in questo formato, è necessario un codepage che indichi che varie combinazioni di byte corrispondono a caratteri. ISO/IEC 8859 definisce un insieme di standard MBCS, ma secondo Wikipedia, ISO ha smesso di mantenerli nel 2004, presumibilmente per concentrarsi su Unicode.

Quindi immagino che il termine moderno per MBCS sia "deprecato a favore di Unicode".

+0

+1. MBCS è un insieme specifico di codifiche, quindi non significa il caso più generale di "usare più di un byte per carattere". Unicode, UTF8 e UTF16 non sono "MBCS", sebbene siano codificati in byte multipli per carattere. –

0

multi-byte significa che un carattere è memorizzato in più di un byte.

estratto wikipedia su utf8:

UTF-8 codifica ogni carattere (codice punto) in 1 a 4 ottetti (8 bit byte), con la codifica singolo ottetto utilizzato solo per la 128 caratteri US-ASCII.

così essenzialmente, utf8 è un set di caratteri multibyte :-).

+0

Tuttavia, se si leggono da http://msdn.microsoft.com/en-us/library/ey142t48%28VS.71%29.aspx#_core_mfc_support_for_mbcs_strings, il carattere multi-byte richiede la "code page". ma UTF-8 non richiede la code page. –

+0

da wp: "UTF-8 semplifica l'identificazione di tre tipi di unità man mano che vengono mantenute separate. Le codifiche di larghezza variabile meno recenti non sono in genere così ben progettate, poiché in esse le unità di traccia e di derivazione possono utilizzare il stessi valori, e in alcuni tutti e tre i tipi usano valori sovrapposti. " la mia interpretazione: i set di caratteri più vecchi avevano bisogno di codepage, utf8 è stato progettato per non averne bisogno. "Unicode ha reso obsolete le code page supportando più lingue e caratteri in modo molto più coerente" –

+0

quindi, questo significa, non possiamo dire, UTF8 = Microsoft Multi Byte Character? :) –

0

Set di caratteri multi byte è un termine generale per qualsiasi schema di codifica che può utilizzare più di 1 byte per codificare un carattere.

Quando si sente il termine normalmente ci si aspetta che faccia riferimento a uno dei vecchi set di caratteri legacy come in "IBM EBCDIC cp1390 - Kanji Multi Byte giapponese".

Tutti gli schemi UNICODE sono tecnicamente MBCS ma ci si aspetterebbe che vengano indicati come "UNICODE" collettivamente o utf-8, utf-16 o utf-32 in particolare.

L'unico software "corrente" che utilizza un set di caratteri MBCS è la suite di Microsoft Office. Che utilizza il "Windows MBCS". Questo è quasi identico a utf-16 a parte alcune piccole differenze. A causa dell'adozione anticipata da parte di Microsofts, la bozza standard di alcuni piccoli pezzi dello standard completo si è rivelata di difficile implementazione, quindi è rimasta con il termine "Windows MBCS".

0

In MSVC, l'opzione "Unicode" in Set di caratteri indica che _T("X") si espande a L"X". Se impostato su MBCS, _T("X") si espande a solo "X".

Un'altra conseguenza è se la macro Win32 MessageBox() si espande a MessageBoxW() o MessageBoxA, nonché i macro per tutte le altre funzioni Win32 che vengono in coppie A/W.

+0

ma che non dice nulla sulle codifiche utilizzate – jalf

+0

@jalf: vero. Questo vale per l'impostazione IDE, l'interpretazione del compilatore delle stringhe e la scelta della funzione A/W. In tutti e tre i casi la distinzione è booleana e la codifica MBCS non specificata. – MSalters

0

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? Io non sono sicuro)

Utilizza Unicode codificato in Utf-16 LE. L'articolo di Wikipedia con cui ho un link ha una nota a riguardo.

Ma che dire Set di caratteri multi-byte? Che cosa significa Set di caratteri multi-byte nel mondo "moderno" attuale? :)

MBCS è principalmente used in the MSDN documentation to mean DBCS. Questo è explained in more detail in this blog post. Se vuoi evitare confusione puoi dire "Pagina codice MBCS".

Problemi correlati