Supporto per set di caratteri multibyte (MBCS, Multibyte Character Set)
I set di caratteri multibyte (MBCS) rappresentano un approccio meno recente alla necessità di supportare i set di caratteri che, come quello giapponese o cinese, non possono essere rappresentati con un singolo byte. Se si sta effettuando un nuovo sviluppo, si consiglia di utilizzare il formato Unicode per tutte le stringhe di testo eccetto per le stringhe di sistema che, probabilmente, non sono visualizzate dagli utenti finali. Il formato MBCS è una tecnologia legacy e non è consigliabile per le nuove tecniche di sviluppo.
L'implementazione MBCS più comune è costituita da Double Byte Character Set (DBCS). Visual C++ in generale e MFC in particolare sono completamente abilitati per DBCS.
Per gli esempi, vedere i file del codice sorgente MFC.
Per le piattaforme usate nei mercati le cui lingue usano set di caratteri di grandi dimensioni, l'alternativa migliore a Unicode è MBCS. MFC supporta MBCS attraverso l'uso di tipi di dati per i mercati internazionali e le funzioni di runtime C. È consigliabile optare per la stessa scelta nel codice.
In MBCS i caratteri vengono codificati in 1 o 2 byte. Nei caratteri a 2 byte il primo byte, o byte di apertura, segnala che questo byte e quello successivo devono essere interpretati come un carattere. Il primo byte proviene da un intervallo di codici riservati per l'uso come byte di apertura. Gli intervalli di byte che possono essere usati come byte di apertura dipendono dalla tabella codici in uso. Ad esempio, la tabella codici giapponese 932 usa l'intervallo compreso tra 0x81 e 0x9F come byte di apertura, mentre la tabella codici coreana 949 usa un intervallo diverso.
Per la programmazione MBCS, tenere presenti tutte le considerazioni seguenti.
I caratteri MBCS nell'ambiente MBCS possono essere visualizzati in stringhe come i nomi di file e directory.
Operazioni di modifica
Le operazioni di modifica nelle applicazioni MBCS devono intervenire sui caratteri e non sui byte. Il cursore non deve dividere un carattere, il tasto freccia destra deve spostare a destra un carattere e così via. L'eliminazione deve eliminare un carattere; Annullare l'operazione dovrebbe reinserirla.
Gestione delle stringhe
In un'applicazione che usa MBCS la gestione delle stringhe pone problemi speciali. Poiché caratteri di entrambe le larghezze vengono combinati in un'unica stringa, è necessario ricordare di controllare i byte di apertura.
Supporto delle librerie di runtime
La libreria di runtime C e MFC supportano programmazione a un byte, MBCS e Unicode. Le stringhe a byte singolo vengono elaborate con la str
famiglia di funzioni di runtime, le stringhe MBCS vengono elaborate con le funzioni corrispondenti _mbs
e le stringhe Unicode vengono elaborate con le funzioni corrispondenti wcs
. Le implementazioni delle funzioni membro delle classi MFC usano funzioni di runtime portabili mappate, nelle situazioni appropriate, alla normale famiglia str
di funzioni, le funzioni MBCS o le funzioni Unicode, come descritto in "Portabilità di MBCS/Unicode".
Portabilità di MBCS/Unicode
Usando il file di intestazione tchar.h, è possibile compilare applicazioni a byte singolo, MBCS e Unicode dalle stesse origini. Tchar.h definisce macro precedute da _tcs, che eseguono il mapping a funzioni , _mbs
owcs
, in base alle str
esigenze. Per compilare MBCS, definire il simbolo _MBCS
. Per compilare Unicode, definire il simbolo _UNICODE
. Per impostazione predefinita, _UNICODE
è definito per le applicazioni MFC. Per altre informazioni, vedere Mapping di testo generico in tchar.h.
Nota
Il comportamento non è definito se si definiscono sia _UNICODE
che _MBCS
.
I file di intestazione Mbctype.h e Mbstring.h definiscono funzioni e macro specifiche di MBCS, che possono essere necessarie in alcuni casi. Ad esempio, _ismbblead
indica se un byte specifico in una stringa è un byte di apertura.
Per la portabilità internazionale, scrivere il codice del programma con set di caratteri Unicode o multibyte (MBCS).