Types de données Windows pour les chaînes

La plupart des opérations de chaîne peuvent utiliser la même logique pour Unicode et pour les pages de codes Windows. La seule différence est que l’unité de fonctionnement de base est un caractère 16 bits (également appelé caractère large) pour Unicode et un caractère 8 bits pour les pages de codes Windows. Les fichiers d’en-tête Windows fournissent plusieurs définitions de type qui facilitent la création de sources pouvant être compilées pour Unicode ou pour les pages de codes Windows.

Windows prend en charge trois jeux de types de données caractères et chaînes : un ensemble de définitions de type générique pouvant être compilées pour des pages de codes Unicode ou Windows, et deux ensembles de définitions de type spécifiques. Un ensemble de définitions de type spécifique est destiné à être utilisé avec Unicode, et l’autre est destiné aux pages de codes Windows.

Une application utilisant des types de données génériques peut être compilée pour Unicode simplement en définissant « UNICODE » avant les instructions #include pour les fichiers d’en-tête, ou pendant la compilation. Les nouvelles applications Windows doivent utiliser Unicode pour éviter les incohérences de pages de codes variées et simplifier la localisation. Ils doivent être écrits avec des types de données génériques et doivent définir « UNICODE » pour compiler ces types en types Unicode. Dans les rares endroits où une application doit fonctionner avec des données de caractères 8 bits, elle peut utiliser explicitement les types pour les pages de codes Windows.

La possibilité de compiler les types génériques en types pour les pages de codes Windows existe principalement pour prendre en charge les applications héritées. Pour compiler pour les pages de codes Windows, l’application omet simplement la définition UNICODE.

L’exemple suivant montre la méthode utilisée dans les fichiers d’en-tête Windows pour définir les trois jeux de types de données. Pour l’implémentation, consultez le fichier d’en-tête 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 lettre « T » dans une définition de type, par exemple, TCHAR ou LPTSTR, désigne un type générique qui peut être compilé pour les pages de codes Windows ou Unicode. La lettre « W » dans une définition de type, par exemple WCHAR ou LPWSTR, désigne un type Unicode. Étant donné que les pages de codes Windows sont au format plus ancien, elles ont des définitions de type simples, telles que CHAR et LPSTR. Pour obtenir une description complète des types de données dans Windows, consultez Types de données Windows.

Unicode dans l'API Windows