Tipi di dati di Windows per le stringhe

La maggior parte delle operazioni di stringa può usare la stessa logica per Unicode e per le tabelle codici di Windows. L'unica differenza è che l'unità di base dell'operazione è un carattere a 16 bit (noto anche come carattere wide) per Unicode e un carattere a 8 bit per le tabelle codici di Windows. I file di intestazione di Windows forniscono diverse definizioni di tipo che semplificano la creazione di origini che possono essere compilate per Unicode o per le tabelle codici di Windows.

Windows supporta tre set di tipi di dati di tipo carattere e stringa: un set di definizioni di tipi generici che possono essere compilate per le tabelle codici Unicode o Windows e due set di definizioni di tipi specifici. Un set di definizioni di tipi specifici è destinato all'uso con Unicode e l'altro è destinato all'uso con le tabelle codici di Windows.

Un'applicazione che usa tipi di dati generici può essere compilata per Unicode semplicemente definendo "UNICODE" prima delle istruzioni #include per i file di intestazione o durante la compilazione. Le nuove applicazioni Windows devono usare Unicode per evitare le incoerenze di tabelle codici diverse e semplificare la localizzazione. Devono essere scritti con tipi di dati generici e devono definire "UNICODE" per compilare questi tipi in tipi Unicode. Nei pochi punti in cui un'applicazione deve funzionare con i dati di tipo carattere a 8 bit, può usare esplicitamente i tipi per le tabelle codici di Windows.

La possibilità di compilare i tipi generici in tipi per le tabelle codici di Windows esiste principalmente per supportare le applicazioni legacy. Per la compilazione per le tabelle codici di Windows, l'applicazione omette semplicemente la definizione UNICODE.

Nell'esempio seguente viene illustrato il metodo utilizzato nei file di intestazione di Windows per definire i tre set di tipi di dati. Per l'implementazione, vedi il file di intestazione Winnt.h.

// Generic types

#ifdef UNICODE
    typedef wchar_t TCHAR;
#else
    typedef unsigned char TCHAR;
#endif

typedef TCHAR *LPTSTR, *LPTCH;

// 8-bit character specific

typedef unsigned char CHAR;
typedef CHAR *LPSTR, *LPCH;

// Unicode specific (wide characters)

typedef unsigned wchar_t WCHAR;
typedef WCHAR *LPWSTR, *LPWCH;

La lettera "T" in una definizione di tipo, ad esempio TCHAR o LPTSTR, definisce un tipo generico che può essere compilato per le tabelle codici di Windows o Unicode. La lettera "W" in una definizione di tipo, ad esempio WCHAR o LPWSTR, designa un tipo Unicode. Poiché le tabelle codici di Windows sono del formato precedente, hanno definizioni di tipo semplici, ad esempio CHAR e LPSTR. Per una descrizione completa dei tipi di dati in Windows, vedere Tipi di dati Windows.

Unicode nell'API Windows