Fonction CompareStringEx (stringapiset.h)
Compare deux chaînes Unicode (caractères larges), pour un paramètre régional spécifié par nom.
Syntaxe
int CompareStringEx(
[in, optional] LPCWSTR lpLocaleName,
[in] DWORD dwCmpFlags,
[in] _In_NLS_string_(cchCount1)LPCWCH lpString1,
[in] int cchCount1,
[in] _In_NLS_string_(cchCount2)LPCWCH lpString2,
[in] int cchCount2,
[in, optional] LPNLSVERSIONINFO lpVersionInformation,
[in, optional] LPVOID lpReserved,
[in, optional] LPARAM lParam
);
Paramètres
[in, optional] lpLocaleName
Pointeur vers un nom de paramètres régionaux ou l’une des valeurs prédéfinies suivantes.
[in] dwCmpFlags
Indicateurs qui indiquent comment la fonction compare les deux chaînes. Par défaut, ces indicateurs ne sont pas définis. Ce paramètre peut spécifier une combinaison de l’une des valeurs suivantes, ou il peut être défini sur 0 pour obtenir le comportement par défaut.
Indicateur | Signification |
---|---|
|
Ignorez la casse, selon le cas linguistiquement approprié. |
|
Ignorez les caractères non espacés, selon le cas linguistiquement approprié.
Note Cet indicateur ne produit pas toujours des résultats prévisibles lorsqu’il est utilisé avec des caractères décomposés, c’est-à-dire des caractères dans lesquels un caractère de base et un ou plusieurs caractères sans espacement ont chacun des valeurs de point de code distinctes.
|
|
Ignorer la casse. Pour de nombreux scripts (notamment les scripts latins), NORM_IGNORECASE coïncide avec LINGUISTIC_IGNORECASE.
Note NORM_IGNORECASE ignore toute distinction tertiaire, qu’il s’agisse de cas linguistique ou non. Par exemple, dans les scripts arabes et indics, cela distingue d’autres formes d’un caractère, mais les différences ne correspondent pas à la casse linguistique. LINGUISTIC_IGNORECASE fait en sorte que la fonction ignore uniquement la casse linguistique réelle, au lieu d’ignorer le troisième poids de tri.
Note Avec ce jeu d’indicateurs, la fonction ignore la distinction entre les formes larges et étroites des caractères de compatibilité CJK.
|
|
Ne faites pas de distinction entre les caractères hiragana et katakana. Les caractères hiragana et katakana correspondants sont égaux. |
|
Ignorez les caractères non espacés. Pour de nombreux scripts (notamment les scripts latins), NORM_IGNORENONSPACE coïncide avec LINGUISTIC_IGNOREDIACRITIC.
Note NORM_IGNORENONSPACE ignore toute distinction secondaire, qu’il s’agisse d’un diacritique ou non. Les scripts pour les langues coréennes, japonaises, chinoises et indices, entre autres, utilisent cette distinction à des fins autres que diacritiques. LINGUISTIC_IGNOREDIACRITIC oblige la fonction à ignorer uniquement les diacritiques réels, au lieu d’ignorer le deuxième poids de tri.
Note NORM_IGNORENONSPACE n’a d’effet que pour les paramètres régionaux dans lesquels les caractères accentués sont triés dans un deuxième passage de main caractères. Normalement, tous les caractères de la chaîne sont d’abord comparés sans tenir compte des accents et, si les chaînes sont égales, une deuxième passe sur les chaînes est effectuée pour comparer les accents. Cet indicateur empêche l’exécution de la deuxième passe. Pour les paramètres régionaux qui trient les caractères accentués dans la première passe, cet indicateur n’a aucun effet.
|
|
Ignorez les symboles et la ponctuation. |
|
Ignorez la différence entre les caractères demi-largeur et pleine largeur, par exemple, C a t == cat. Le formulaire pleine largeur est une distinction de mise en forme utilisée dans les scripts chinois et japonais. |
|
Utilisez les règles linguistiques par défaut pour la casse au lieu de règles de système de fichiers. Notez que la plupart des scénarios pour CompareStringEx utilisent cet indicateur. Cet indicateur n’a pas besoin d’être utilisé lorsque votre application appelle CompareStringOrdinal. |
|
Windows 7 : Traitez les chiffres comme des nombres pendant le tri, par exemple, triez « 2 » avant « 10 ». |
|
Traitez la ponctuation comme des symboles. |
[in] lpString1
Pointeur vers la première chaîne à comparer.
[in] cchCount1
Longueur de la chaîne indiquée par lpString1, à l’exclusion du caractère null de fin. L’application peut fournir une valeur négative si la chaîne est terminée par null. Dans ce cas, la fonction détermine automatiquement la longueur.
[in] lpString2
Pointeur vers la deuxième chaîne à comparer.
[in] cchCount2
Longueur de la chaîne indiquée par lpString2, à l’exclusion du caractère null de fin. L’application peut fournir une valeur négative si la chaîne est terminée par null. Dans ce cas, la fonction détermine automatiquement la longueur.
[in, optional] lpVersionInformation
Pointeur vers une structure NLSVERSIONINFOEX qui contient les informations de version sur la fonctionnalité NLS pertinente ; généralement récupéré à partir de GetNLSVersionEx.
Windows Vista, Windows 7 : Réservés au; doit avoir la valeur NULL.
[in, optional] lpReserved
Réservés au; doit avoir la valeur NULL.
[in, optional] lParam
Réservés au; doit avoir la valeur 0.
Valeur retournée
Retourne l’une des valeurs suivantes en cas de réussite. Pour conserver la convention d’exécution C de comparaison de chaînes, la valeur 2 peut être soustraite d’une valeur de retour différente de zéro. Ensuite, la signification de <0, ==0 et >0 est cohérente avec le runtime C.
- CSTR_LESS_THAN. La chaîne indiquée par lpString1 est moins en valeur lexicale que la chaîne indiquée par lpString2.
- CSTR_EQUAL. La chaîne indiquée par lpString1 est équivalente en valeur lexicale à la chaîne indiquée par lpString2. Les deux chaînes sont équivalentes à des fins de tri, bien que pas nécessairement identiques.
- CSTR_GREATER_THAN. La chaîne indiquée par lpString1 est supérieure en valeur lexicale à la chaîne indiquée par lpString2.
- ERROR_INVALID_FLAGS. Les valeurs fournies pour les indicateurs n’étaient pas valides.
- ERROR_INVALID_PARAMETER. L’une des valeurs de paramètre n’était pas valide.
Remarques
CompareString et CompareStringEx sont tous deux optimisés pour s’exécuter à la vitesse la plus élevée lorsque dwCmpFlags est défini sur 0 ou NORM_IGNORECASE, que cchCount1 et cchCount2 sont définis sur -1 et que les paramètres régionaux ne prennent pas en charge les compressions linguistiques, comme lorsque le tri espagnol traditionnel traite « ch » comme un seul caractère.
CompareString et CompareStringEx ignorent les kashidas arabes pendant la comparaison. Ainsi, si deux chaînes sont identiques, à l’exception de la présence de kashidas, la fonction retourne CSTR_EQUAL.
Lorsque l’application utilise les indicateurs NORM_IGNORENONSPACE et NORM_IGNORECASE avec la fonction de tri, les indicateurs peuvent parfois interférer avec les comparaisons de chaînes. Cette situation peut se produire pour des paramètres régionaux qui ne prennent pas en charge les caractères non espacés ou la casse, mais qui utilisent des niveaux de poids équivalents pour gérer d’autres opérations importantes. Dans ce cas, votre application doit utiliser les indicateurs LINGUISTIC_IGNOREDIACRITIC et LINGUISTIC_IGNORECASE. Ces indicateurs fournissent des résultats linguistiquement appropriés pour trier les points de code qui utilisent des marques de casse et diacritiques, et n’ont aucun impact sur d’autres points de code.
À compter de Windows Vista : CompareString et CompareStringEx peuvent récupérer des données à partir de paramètres régionaux personnalisés. Il n’est pas garanti que les données soient identiques d’un ordinateur à l’autre ou entre les exécutions d’une application. Si votre application doit conserver ou transmettre des données, consultez Utilisation des données de paramètres régionaux persistants.
À compter de Windows 8 : si votre application transmet des balises de langue à cette fonction à partir de l’espace de noms Windows.Globalization, elle doit d’abord convertir les balises en appelant ResolveLocaleName.
À compter de Windows 8 : CompareStringEx est déclaré dans Stringapiset.h. Avant Windows 8, elle était déclarée dans Winnls.h.
Exemples
Vous trouverez un exemple montrant l’utilisation de cette fonction dans NLS : Exemple d’API basées sur un nom.
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Windows Vista [applications de bureau | applications UWP] |
Serveur minimal pris en charge | Windows Server 2008 [applications de bureau | applications UWP] |
Plateforme cible | Windows |
En-tête | stringapiset.h (inclure Windows.h) |
Bibliothèque | Kernel32.lib |
DLL | Kernel32.dll |
Voir aussi
Paramètres régionaux personnalisés
Gestion du tri dans vos applications
Prise en charge des langues nationales
Fonctions de prise en charge des langues nationales
Considérations relatives à la sécurité : Fonctionnalités internationales
Utilisation de la normalisation Unicode pour représenter des chaînes