Supporto per Unicode
Unicode è una specifica per il supporto di tutti i set di caratteri, inclusi quelli che non possono essere rappresentati in un singolo byte. Se si programma per un mercato internazionale, è consigliabile usare Unicode o un set di caratteri multibyte (MBCS). In alternativa, scrivere il codice del programma in modo che sia possibile compilarlo per modificando un'opzione.
Un carattere di tipo "wide" è un codice carattere multilingue da due byte. Decine di migliaia di caratteri, che comprendono quasi tutti i caratteri usati nell'informatica moderna in tutto il mondo, inclusi i simboli tecnici e i caratteri di pubblicazione speciali, possono essere rappresentati in base alla specifica Unicode come un singolo carattere wide codificato tramite UTF-16. I caratteri che non possono essere rappresentati in un solo carattere wide possono essere rappresentati in una coppia Unicode usando la funzionalità coppia di surrogati Unicode. Poiché quasi ogni carattere in uso comune è rappresentato in UTF-16 in un singolo carattere a 16 bit wide, l'uso di caratteri wide semplifica la programmazione con set di caratteri internazionali. I caratteri wide codificati con UTF-16LE (per little-endian) sono il formato di carattere nativo per Windows.
Una stringa di caratteri wide è rappresentata come una matrice wchar_t[]
ed è puntata da un puntatore wchar_t*
. È possibile rappresentare qualsiasi carattere ASCII come carattere di tipo wide, facendolo precedere dalla lettera "L". L'\0', ad esempio, è il carattere wide di terminazione NULL (a 16 bit). In modo analogo, qualsiasi valore letterale stringa ASCII può essere rappresentato come valore letterale stringa wide, anteponendovi la lettera "L", ad esempio L"Hello".
In genere, i caratteri di tipo wide occupano una maggiore quantità di memoria rispetto ai caratteri multibyte, ma consentono un'elaborazione più veloce. Inoltre, è possibile rappresentare una sola impostazione locale alla volta in una codifica multibyte, mentre tutti i set di caratteri nel mondo sono rappresentati contemporaneamente dalla rappresentazione Unicode.
Nel framework MFC il supporto sistematico per il formato Unicode è ottenuto mediante l'uso di macro trasferibili, come indicato nella tabella seguente.
Tipi di dati trasferibili in MFC
Tipo di dati non trasferibile | Sostituito da questa macro |
---|---|
char , wchar_t |
_TCHAR |
char* , LPSTR (tipo di dati Win32), LPWSTR |
LPTSTR |
const char* , LPCSTR (tipo di dati Win32), LPCWSTR |
LPCTSTR |
La classe CString
usa _TCHAR
come base e fornisce costruttori e operatori per semplici conversioni. La maggior parte delle operazioni di stringa per Unicode può essere scritta usando la stessa logica impiegata per la gestione del set di caratteri ANSI di Windows, con la differenza che l'unità di base è costituita da un carattere a 16 bit anziché da un byte a 8 bit. A differenza di quanto avviene con i set di caratteri multibyte (MBCS), non è necessario né consigliabile trattare un carattere Unicode come se fosse formato da due byte distinti. Tuttavia, devi affrontare la possibilità di un singolo carattere rappresentato da una coppia surrogata di caratteri wide. In generale, non scrivere codice che presuppone la lunghezza di una stringa è uguale al numero di caratteri, sia stretto o largo, che contiene.
Cosa vuoi fare?
Usare il supporto MFC Unicode e Multibyte Character Set (MBCS)
Usa wmain in modo da poter passare argomenti a caratteri wide al mio programma
Informazioni sui mapping di testo generico per la portabilità a larghezza di byte