Supporto per set di caratteri Unicode e multibyte (MBCS)
Alcune lingue, ad esempio giapponese e cinese, hanno set di caratteri di grandi dimensioni. Per supportare la programmazione per questi mercati, Microsoft Foundation Class Library (MFC) consente due diversi approcci alla gestione di set di caratteri di grandi dimensioni:
Unicode,
wchar_t
caratteri wide e stringhe codificate come UTF-16.Set di caratteri multibyte (MBCS),
char
caratteri e stringhe a byte singolo o doppio codificati in un set di caratteri specifico delle impostazioni locali.
Nota
Microsoft consiglia le librerie Unicode MFC per tutti i nuovi sviluppi.
Le librerie MBCS sono deprecate in Visual Studio 2013 e Visual Studio 2015. Questo non si verifica più.
A partire da Visual Studio 2017, le librerie MBCS non sono più deprecate e non generano avvisi di deprecazione.
Supporto MFC per stringhe Unicode
L'intera libreria di classi MFC è abilitata in modo condizionale per i caratteri Unicode e le stringhe archiviate in caratteri wide come UTF-16. In particolare, la classe CString
è abilitata per Unicode.
Questi file di libreria, debugger e DLL vengono usati per supportare Unicode in MFC:
VersioneMFCU.LIB
VersioneMFCdefinita dall'utente. Movimento di liberazione
VERSIONE DI MFCMU.LIB
MFCMversioneUD. Movimento di liberazione
VERSIONE MFCSU.LIB
MFCSversioneUD. Movimento di liberazione
UAFXCW. Movimento di liberazione
UAFXCWD. Movimento di liberazione
VersioneMFCU.PDB
VersioneMFCdefinita dall'utente. PDB
VERSIONE MFCMU.PDB
MFCMversioneUD. PDB
VERSIONE MFCSU.PDB
MFCSversioneUD. PDB
UAFXCW. PDB
UAFXCWD. PDB
U.DLL della versioneMFC
UD.DLL della versioneMFC
U.DLL della versioneMFCM
UD.DLL della versioneMFCM
La versione rappresenta il numero di versione del file, ad esempio '140' indica la versione 14.0.
CString
è basato sul TCHAR
tipo di dati. Se il simbolo _UNICODE
è definito per una compilazione del programma, TCHAR
viene definito come tipo wchar_t
, un tipo di codifica dei caratteri a 16 bit. In caso contrario, TCHAR
è definito come char
, la normale codifica dei caratteri a 8 bit. Pertanto, in Unicode, un CString
è composto da caratteri a 16 bit. Senza Unicode, è composto da caratteri di tipo char
.
Per completare la programmazione Unicode dell'applicazione, è necessario:
Utilizzare la
_T
macro per codificare in modo condizionale le stringhe letterali da portare in Unicode.Quando si passano stringhe, prestare attenzione al fatto che gli argomenti della funzione richiedano una lunghezza in caratteri o una lunghezza in byte. La differenza è importante se si usano stringhe Unicode.
Usare versioni portabili delle funzioni di gestione delle stringhe di runtime C.
Usare i tipi di dati seguenti per i caratteri e i puntatori a caratteri:
Usare
TCHAR
dove usarechar
.Usare
LPTSTR
dove usarechar
*.Usare
LPCTSTR
dove usareconst char
*.CString
fornisce l'operatoreLPCTSTR
da convertire traCString
eLPCTSTR
.
CString
fornisce anche costruttori con riconoscimento Unicode, operatori di assegnazione e operatori di confronto.
Il riferimento alla libreria di runtime definisce le versioni portabili di tutte le relative funzioni di gestione delle stringhe. Per altre informazioni, vedere la categoria Internazionalizzazione.
Supporto MFC per stringhe MBCS
La libreria di classi è abilitata anche per i set di caratteri multibyte, ma solo per i set di caratteri a byte doppio (DBCS).
In un set di caratteri multibyte un carattere può essere largo uno o 2 byte. Se è largo 2 byte, il primo byte è un "byte lead" speciale scelto da un intervallo specifico, a seconda della tabella codici in uso. Insieme, il lead e i "byte finali" specificano una codifica di caratteri univoca.
Se il simbolo _MBCS
è definito per una compilazione del programma, digitare TCHAR
, su cui CString
è basato, esegue il mapping a char
. Spetta all'utente determinare quali byte in un CString
sono byte lead e quali sono byte finali. La libreria di runtime C fornisce funzioni che consentono di determinarlo.
In DBCS una determinata stringa può contenere tutti i caratteri ANSI a byte singolo, tutti i caratteri a byte doppio o una combinazione dei due. Queste possibilità richiedono particolare attenzione nell'analisi delle stringhe. Sono inclusi CString
gli oggetti .
Nota
La serializzazione di stringhe Unicode in MFC può leggere stringhe Unicode e MBCS indipendentemente dalla versione dell'applicazione in esecuzione. I file di dati sono portabili tra le versioni Unicode e MBCS del programma.
CString
Le funzioni membro usano versioni speciali di "testo generico" delle funzioni di runtime C che chiamano oppure usano funzioni che supportano Unicode. Pertanto, ad esempio, se una CString
funzione chiama strcmp
in genere , chiama invece la funzione _tcscmp
generica-text corrispondente. A seconda della modalità di definizione dei simboli _MBCS
e _UNICODE
delle mappe, _tcscmp
viene eseguito il mapping nel modo seguente:
Simboli | Funzione |
---|---|
_MBCS definito |
_mbscmp |
_UNICODE definito |
wcscmp |
Nessun simbolo definito | strcmp |
Nota
I simboli _MBCS
e _UNICODE
si escludono a vicenda.
I mapping di funzioni di testo generico per tutte le routine di gestione delle stringhe di runtime sono descritti in Riferimenti alla libreria di runtime C. Per un elenco, vedere Internazionalizzazione.
Analogamente, CString
i metodi vengono implementati usando mapping di tipi di dati generici. Per abilitare sia MBCS che Unicode, MFC usa TCHAR
per o wchar_t
, LPTSTR
per char
char
* o wchar_t*
e LPCTSTR
per const char
* o .const wchar_t*
Questi assicurano i mapping corretti per MBCS o Unicode.