Comparaison et tri des données pour une culture spécifique

Mise à jour : novembre 2007

L'ordre alphabétique et les conventions de classement d'éléments varient d'une culture à l'autre. Par exemple, l'ordre de tri peut respecter la casse ou ne pas la respecter. Il peut être basé sur la phonétique ou sur l'apparence du caractère. Dans les langues d'Asie orientale, les éléments sont classés en fonction du trait et de la clé des idéogrammes. Les tris peuvent aussi varier en fonction de l'ordre fondamental utilisé par la langue ou la culture pour l'alphabet. Par exemple, la langue suédoise emploie un caractère « Æ » qu'elle place après « Z » dans l'alphabet. La langue allemande connaît, elle aussi, ce caractère, mais le trie comme « ae », après « A » dans l'alphabet. Une application mondialisable doit être capable de comparer et trier des données selon la culture afin de prendre en charge des conventions de tri spécifiques à une culture et à une langue.

Remarque   Dans certains scénarios, un comportement dépendant de la culture n'est pas souhaitable. Pour plus d'informations sur quand et comment effectuer des opérations indépendantes de la culture, consultez Opérations de chaînes indépendantes de la culture.

Comparaison de chaînes

La classe CompareInfo fournit un ensemble de méthodes que vous pouvez utiliser pour effectuer des comparaisons de chaînes dépendantes de la culture. La classe CultureInfo a une propriété CompareInfo qui est une instance de cette classe. Cette propriété définit comment comparer et trier les chaînes pour une culture spécifique. La méthode Compare() utilise les informations de la propriété CompareInfo pour comparer des chaînes. La méthode String.Compare retourne un entier négatif si chaîne1 est inférieure à chaîne2, zéro si chaîne1 et chaîne2 sont égales et un entier positif si chaîne1 est supérieure à chaîne2.

L'exemple de code suivant montre comment la méthode String.Compare peut évaluer deux chaînes différemment selon la culture utilisée pour effectuer la comparaison. D'abord, CurrentCulture a la valeur Danois (Danemark) et les chaînes « Apple » et « Æble » sont comparées. La langue danoise traite le caractère « Æ » comme une lettre individuelle et la trie après « Z » dans l'alphabet. Par conséquent, la chaîne "Æble" est supérieure à "Apple" pour la culture danoise. Ensuite, CurrentCulture a la valeur Anglais (États-Unis) et lex chaînes « Apple » et « Æble » sont comparées. Cette fois, la chaîne "Æble" est évaluée comme inférieure à "Apple". En effet, la langue anglaise traite le caractère « Æ » comme un symbole spécial, qu'elle trie avant la lettre « A » dans l'alphabet.

Imports System
Imports System.Globalization
Imports System.Threading
Imports Microsoft.VisualBasic

Public Class TestClass
   Public Shared Sub Main()
      Dim str1 As String = "Apple"
      Dim str2 As String = "Æble"
      
      ' Sets the CurrentCulture to Danish in Denmark.
      Thread.CurrentThread.CurrentCulture = New CultureInfo("da-DK")
      Dim result1 As Integer = [String].Compare(str1, str2)
      Console.WriteLine(ControlChars.Newline + "When the CurrentCulture _
         is ""da-DK""," + ControlChars.Newline + " the result of _
         comparing_{0} with {1} is: {2}", str1, str2, result1)
      
      ' Sets the CurrentCulture to English in the U.S.
      Thread.CurrentThread.CurrentCulture = New CultureInfo("en-US")
      Dim result2 As Integer = [String].Compare(str1, str2)
      Console.WriteLine(ControlChars.Newline + "When the _
         CurrentCulture is""en-US""," + ControlChars.Newline + " _
         the result of comparing {0} with {1} is: {2}", str1, _
         str2,result2)
   End Sub
End Class
using System;
using System.Globalization;
using System.Threading;

public class CompareStringSample
{
   public static void Main()
   {
      string str1 = "Apple";
      string str2 = "Æble"; 

      // Sets the CurrentCulture to Danish in Denmark.
      Thread.CurrentThread.CurrentCulture = new CultureInfo("da-DK");
      // Compares the two strings.
      int result1 = String.Compare(str1, str2);
      Console.WriteLine("\nWhen the CurrentCulture is \"da-DK\",\nthe 
            result of comparing {0} with {1} is: {2}",str1, str2, 
            result1);

      // Sets the CurrentCulture to English in the U.S.
      Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
      // Compares the two strings.
      int result2 = String.Compare(str1, str2);
      Console.WriteLine("\nWhen the CurrentCulture is \"en-US\",\nthe 
            result of comparing {0} with {1} is: {2}",str1, str2, 
            result2);
   }
}

Si vous exécutez ce code, la sortie présente l'aspect suivant :

When the CurrentCulture is "da-DK", 
the result of comparing Apple with Æble is: -1

When the CurrentCulture is "en-US", 
the result of comparing Apple with Æble is: 1

Pour plus d'informations sur les comparaisons de chaînes, consultez Comparaison de chaînes.

Utilisation d'ordres de tri secondaires

Certaines cultures prennent en charge plusieurs ordres de tri. Par exemple, la culture "zh-CN" (chinois en Chine) prend en charge un tri selon la prononciation (par défaut) et un tri en fonction du nombre de traits. Lorsque votre application crée un objet CultureInfo en utilisant un nom de culture, par exemple "zh-CN", l'ordre de tri par défaut est utilisé. Pour spécifier l'ordre de tri secondaire, l'application doit créer un objet CultureInfo en utilisant l'identificateur LCID pour l'ordre de tri secondaire. L'application doit ensuite obtenir un objet CompareInfo de CompareInfo à utiliser dans les comparaisons de chaînes. Votre application peut créer directement un objet CompareInfo à l'aide de GetCompareInfo(), en spécifiant l'identificateur de paramètres régionaux (LCID) pour l'ordre de tri secondaire.

Le tableau suivant énumère les cultures qui prennent en charge des ordres de tri secondaires et précise les identificateurs LCID pour les ordres de tri par défaut et secondaire.

Nom de la culture

Culture

Nom et LCID de l'ordre de tri par défaut

Nom et LCID de l'ordre de tri secondaire

es-ES

Espagnol (Espagne)

International : 0x00000C0A

Traditionnel : 0x0000040A

zh-TW

Chinois (Taïwan)

Nombre de traits : 0x00000404

Bopomofo : 0x00030404

zh-CN

Chinois (Chine)

Prononciation : 0x00000804

Nombre de traits : 0x00020804

zh-HK

Chinois (Hong Kong, Région administrative spéciale de)

Nombre de traits : 0x00000c04

Nombre de traits : 0x00020c04

zh-SG

Chinois (Singapour)

Prononciation : 0x00001004

Nombre de traits : 0x00021004

zh-MO

Chinois (Région administrative spéciale de Macao)

Prononciation : 0x00001404

Nombre de traits : 0x00021404

ja-JP

Japonais (Japon)

Par défaut : 0x00000411

Unicode : 0x00010411

ko-KR

Coréen (Corée)

Par défaut : 0x00000412

Coréen Xwansung - Unicode : 0x00010412

de-DE

Allemand (Allemagne)

Dictionnaire : 0x00000407

Annuaire téléphonique (DIN) : 0x00010407

hu-HU

Hongrois (Hongrie)

Par défaut : 0x0000040e

Tri technique : 0x0001040e

ka-GE

Géorgien (Géorgie)

Traditionnel : 0x00000437

Tri moderne : 0x00010437

Recherche de caractères dans les chaînes

Votre application peut utiliser la méthode surchargée IndexOf() pour extraire l'index de base zéro d'un caractère ou d'une sous-chaîne à l'intérieur d'une chaîne spécifiée. Cette méthode extrait un entier négatif si le caractère ou la sous-chaîne est introuvable dans la chaîne spécifiée. En recherchant un caractère spécifié à l'aide de CompareInfo.IndexOf, l'application doit tenir compte du fait que les surcharges de méthode qui acceptent un paramètre CompareOptions n'effectuent pas la comparaison de la même manière que celles qui n'en acceptent pas. Les surcharges de méthode qui recherchent un type de caractère et n'acceptent pas de paramètre CompareOptions exécutent une recherche dépendante de la culture. Lorsqu’une valeur Unicode représente un caractère précomposé, tel que la ligature « Æ » (\u00C6), elle peut être considérée comme équivalant à toute occurrence de ses composants dans le bon ordre, par exemple « AE » (\u0041\u0045), selon la culture. Pour exécuter une recherche ordinale (indépendante de la culture) d'un caractère dont le type est considéré équivalent à un autre type de caractère uniquement si les valeurs Unicode sont les mêmes, l'application doit utiliser l'une des surcharges CompareInfo.IndexOf qui prennent un paramètre CompareOptions et lui ont donné la valeur Ordinal.

Vos applications peuvent également utiliser des surcharges de la méthode IndexOf() qui recherche un caractère pour exécuter une recherche ordinale (indépendante de la culture). Notez que les surcharges de cette méthode qui recherchent une chaîne effectuent une recherche dépendante de la culture.

L'exemple de code suivant illustre la différence entre les résultats retournés par la méthode IndexOf selon la culture. Un objet CultureInfo est créé pour danois (Danemark), désigné par « da-DK ». Ensuite, il utilise des surcharges de la méthode CompareInfo.IndexOf pour rechercher le caractère « Æ » dans les chaînes « Æble » et « aeble ». Notez que pour la culture « da-DK », la méthode CompareInfo.IndexOf qui admet un paramètre CompareOptions ayant la valeur Ordinal et la même méthode qui n'en admet pas retournent le même résultat. Le caractère « Æ » est uniquement considéré comme équivalant à la valeur de code Unicode \u00E6.

Imports System
Imports System.Globalization
Imports System.Threading
Imports Microsoft.VisualBasic

Public Class CompareClass
   Public Shared Sub Main()
      Dim str1 As String = "Æble"
      Dim str2 As String = "aeble"
      Dim find As Char = "Æ"
      
      ' Creates a CultureInfo for Danish in Denmark.
      Dim ci As New CultureInfo("da-DK")
      
      Dim result1 As Integer = ci.CompareInfo.IndexOf(str1, find)
      Dim result2 As Integer = ci.CompareInfo.IndexOf(str2, find)
      Dim result3 As Integer = ci.CompareInfo.IndexOf(str1, find, _ 
         CompareOptions.Ordinal)
      Dim result4 As Integer = ci.CompareInfo.IndexOf(str2, find, _
         CompareOptions.Ordinal)      
      
      Console.WriteLine(ControlChars.Newline + "CultureInfo is set to _
         {0}", ci.DisplayName)
      Console.WriteLine(ControlChars.Newline + "Using _
         CompareInfo.IndexOf(string, char) method" + _
         ControlChars.Newline + " the result of searching for {0} in the _
         string {1} is: {2}", find, str1, result1)
      Console.WriteLine(ControlChars.Newline + "Using _
         CompareInfo.IndexOf(string, char) method" + _
         ControlChars.Newline + " the result of searching for {0} in the _
         string {1} is: {2}", find, str2, result2)
      Console.WriteLine(ControlChars.Newline + "Using _
         CompareInfo.IndexOf(string, char, CompareOptions) method" + _
         ControlChars.Newline + " the result of searching for {0} in the _
         string {1} is: {2}", find, str1, result3)
      Console.WriteLine(ControlChars.Newline + "Using _
         CompareInfo.IndexOf(string, char, CompareOptions) method" + _
         ControlChars.Newline + " the result of searching for {0} in the _
         string {1} is: {2}", find, str2, result4)
   End Sub
End Class
using System;
using System.Globalization;
using System.Threading;

public class CompareClass
{

   public static void Main()
   {
      string str1 = "Æble";
      string str2 = "aeble"; 
      char find = 'Æ';

      // Creates a CultureInfo for Danish in Denmark.
      CultureInfo ci= new CultureInfo("da-DK");

      int result1 = ci.CompareInfo.IndexOf(str1, find);
      int result2 = ci.CompareInfo.IndexOf(str2, find);
      int result3 = ci.CompareInfo.IndexOf(str1, find,   
         CompareOptions.Ordinal);
      int result4 = ci.CompareInfo.IndexOf(str2, find, 
         CompareOptions.Ordinal);

      Console.WriteLine("\nCultureInfo is set to {0} ", ci.DisplayName);
      Console.WriteLine("\nUsing CompareInfo.IndexOf(string, char) 
         method\nthe result of searching for {0} in the string {1} is: 
         {2}", find, str1, result1);
      Console.WriteLine("\nUsing CompareInfo.IndexOf(string, char) 
         method\nthe result of searching for {0} in the string {1} is: 
         {2}", find, str2, result2);
      Console.WriteLine("\nUsing CompareInfo.IndexOf(string, char, 
         CompareOptions) method\nthe result of searching for {0} in the 
         string {1} is: {2}", find, str1, result3);
      Console.WriteLine("\nUsing CompareInfo.IndexOf(string, char, 
         CompareOptions) method\nthe result of searching for {0} in the 
         string {1} is: {2}", find, str2, result4);
   }
}

Ce code génère la sortie suivante :

CultureInfo is set to Danish (Denmark) 

Using CompareInfo.IndexOf(string, char) method
the result of searching for Æ in the string Æble is: 0

Using CompareInfo.IndexOf(string, char) method
the result of searching for Æ in the string aeble is: -1

Using CompareInfo.IndexOf(string, char, CompareOptions) method
the result of searching for Æ in the string Æble is: 0

Using CompareInfo.IndexOf(string, char, CompareOptions) method
the result of searching for Æ in the string aeble is: -1

Si votre application remplace CultureInfo ci = new CultureInfo ("da-DK") par CultureInfo ci = new CultureInfo ("en-US"), la méthode IndexOf() avec le paramètre CompareOptions défini à Ordinal et la même méthode sans ce paramètre retournent des résultats différents. La comparaison dépendante de la culture effectuée par la méthode IndexOf évalue le caractère « Æ »  comme équivalent à ses composants « ae ». La comparaison ordinale (indépendante de la culture) effectuée par la méthode IndexOf ne retourne pas le caractère « Æ » comme équivalent à « ae » parce que leurs valeurs de code Unicode ne sont pas identiques.

Lorsque vous recompilez et exécutez ce code pour l'Anglais (États-Unis), culture « en-US », vous obtenez la sortie suivante :

The CurrentCulture property is set to English (United States) 

Using CompareInfo.IndexOf(string, char) method
the result of searching for Æ in the string Æble is: 0

Using CompareInfo.IndexOf(string, char) method
the result of searching for Æ in the string aeble is: 0

Using CompareInfo.IndexOf(string, char, CompareOptions) method
the result of searching for Æ in the string Æble is: 0

Using CompareInfo.IndexOf(string, char, CompareOptions) method
the result of searching for Æ in the string aeble is: -1

Tri de chaînes

La classe Array fournit une méthode surchargée Sort() qui permet à votre application de trier des tableaux selon la propriété CurrentCulture. L'exemple suivant crée un tableau de trois chaînes. En premier lieu, la propriété CurrentCulture a la valeur Anglais (États-Unis), « en-US », et la méthode Sort() est appelée. L'ordre de tri résultant est basé sur les conventions de tri pour la culture Anglais (États-Unis). Ensuite, la propriété CurrentCulture est définie comme « da-DK » et la méthode Array.Sort est appelée une nouvelle fois. Remarquez comment l'utilisation des conventions de tri pour la culture "da-DK" aboutit à un ordre de tri différent du précédent.

Imports System
Imports System.Threading
Imports System.IO
Imports System.Globalization
Imports Microsoft.VisualBasic

Public Class TextToFile   
   Public Shared Sub Main()
      Dim str1 As [String] = "Apple"
      Dim str2 As [String] = "Æble"
      Dim str3 As [String] = "Zebra"
      
      ' Creates and initializes a new Array to store 
      ' these date/time objects.
      Dim stringArray As Array = Array.CreateInstance(GetType([String]), _
         3)
      stringArray.SetValue(str1, 0)
      stringArray.SetValue(str2, 1)
      stringArray.SetValue(str3, 2)
      
      ' Displays the values of the Array.
      Console.WriteLine(ControlChars.Newline + "The Array initially _
         contains the following strings:")
      PrintIndexAndValues(stringArray)
      
      ' Sets the CurrentCulture to "en-US".
      Thread.CurrentThread.CurrentCulture = New CultureInfo("en-US")
      ' Sorts the values of the Array.
      Array.Sort(stringArray)
      
      ' Displays the values of the Array.
      Console.WriteLine(ControlChars.Newline + "After sorting for the _
         culture ""en-US"":")
      PrintIndexAndValues(stringArray)
      
      ' Sets the CurrentCulture to "da-DK".
      Thread.CurrentThread.CurrentCulture = New CultureInfo("da-DK")
      ' Sort the values of the Array.
      Array.Sort(stringArray)
      
      ' Displays the values of the Array.
      Console.WriteLine(ControlChars.Newline + "After sorting for the _
         culture ""da-DK"":")
      PrintIndexAndValues(stringArray)
   End Sub

   Public Shared Sub PrintIndexAndValues(myArray As Array)
      Dim i As Integer
      For i = myArray.GetLowerBound(0) To myArray.GetUpperBound(0)
         Console.WriteLine(ControlChars.Tab + "[{0}]:" + _
            ControlChars.Tab + "{1}", i, myArray.GetValue(i))
      Next i
   End Sub 
End Class
using System;
using System.Threading;
using System.Globalization;

public class ArraySort 
{
   public static void Main(String[] args) 
   {
      String str1 = "Apple";
      String str2 = "Æble";
      String str3 = "Zebra";

      // Creates and initializes a new Array to store the strings.
      Array stringArray = Array.CreateInstance( typeof(String), 3 );
      stringArray.SetValue(str1, 0 );
      stringArray.SetValue(str2, 1 );
      stringArray.SetValue(str3, 2 );

      // Displays the values of the Array.
      Console.WriteLine( "\nThe Array initially contains the following 
            strings:" );
      PrintIndexAndValues(stringArray);

      // Sets the CurrentCulture to "en-US".
      Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
      // Sort the values of the Array.
      Array.Sort(stringArray);

      // Displays the values of the Array.
      Console.WriteLine( "\nAfter sorting for the culture \"en-US\":" );
      PrintIndexAndValues(stringArray); 

      // Sets the CurrentCulture to "da-DK".
      Thread.CurrentThread.CurrentCulture = new CultureInfo("da-DK");
      // Sort the values of the Array.
      Array.Sort(stringArray);

      // Displays the values of the Array.
      Console.WriteLine( "\nAfter sorting for the culture \"da-DK\":" );
      PrintIndexAndValues(stringArray); 
   }
   public static void PrintIndexAndValues(Array myArray)  
   {
      for ( int i = myArray.GetLowerBound(0); i <= 
            myArray.GetUpperBound(0); i++ )
      Console.WriteLine( "\t[{0}]:\t{1}", i, myArray.GetValue( i ) );
   }
}

Ce code génère la sortie suivante :

The Array initially contains the following strings:
   [0]:   Apple
   [1]:   Æble
   [2]:   Zebra

After sorting for the culture "en-US":
   [0]:   Æble
   [1]:   Apple
   [2]:   Zebra

After sorting for the culture "da-DK":
   [0]:   Apple
   [1]:   Zebra
   [2]:   Æble

Utilisation de clés de tri

Les clés de tri s'utilisent pour prendre en charge des tris tenant compte des cultures. Selon la norme Unicode, chaque caractère d'une chaîne se voit attribuer différentes pondérations de tri, notamment les pondérations alphabétique, diacritique et de casse. Une clé de tri sert de référentiel de ces pondérations pour une chaîne particulière. Par exemple, une clé de tri peut contenir une chaîne de pondération alphabétique, suivie d'une chaîne de pondération de casse, etc. Pour plus d'informations sur les concepts de clés de tri, consultez la norme Unicode à l'adresse http://www.unicode.org.

Dans .NET Framework, la classe SortKey mappe les chaînes sur leurs clés de tri et inversement. Vos applications peuvent utiliser la méthode GetSortKey() pour créer une clé de tri pour une chaîne que vous spécifiez. La clé de tri résultante pour une chaîne spécifiée est une suite d'octets qui peuvent varier selon la culture CurrentCulture et la valeur CompareOptions que vous spécifiez. Par exemple, si l'application spécifie la valeur IgnoreCase en créant une clé de tri, une opération de comparaison de chaînes utilisant la clé de tri ignore la casse.

Après avoir créé une clé de tri pour une chaîne, l'application peut la passer comme paramètre aux méthodes fournies par la classe SortKey. La méthode Compare autorise la comparaison de clés de tri. Parce que cette méthode effectue une simple comparaison octet par octet, elle est bien plus rapide que Compare(). Les applications à forte intensité de tri pourront améliorer les performances en générant et stockant des clés de tri pour toutes les chaînes utilisées. Lorsqu'une opération de tri ou de comparaison est requise, l'application peut utiliser les clés de tri au lieu des chaînes.

L'exemple de code suivant crée des clés de tri pour deux chaînes lorsque la culture CurrentCulture est définie comme « da-DK ». Il compare les deux chaînes à l'aide de la méthode SortKey.Compare et affiche les résultats. La méthode retourne un entier négatif si chaîne1 est inférieure à chaîne2, zéro (0) si chaîne1 et chaîne2 sont égales et un entier positif si chaîne1 est supérieure à chaîne2. Ensuite, l'exemple définit « en-US » comme propriété CurrentCulture et crée des clés de tri pour les deux chaînes. Les clés de tri pour les chaînes sont comparées et les résultats sont affichés. Remarquez que les résultats du tri diffèrent selon la culture CurrentCulture. Bien que les résultats de l'exemple de code suivant soient identiques à ceux de la comparaison de ces chaînes dans l'exemple Comparaison de chaînes, plus haut dans cette rubrique, la méthode SortKey.Compare est plus rapide que la méthode String.Compare.

Imports System
Imports System.Threading
Imports System.Globalization
Imports Microsoft.VisualBasic

Public Class SortKeySample
   Public Shared Sub Main()
      Dim str1 As [String] = "Apple"
      Dim str2 As [String] = "Æble"
      
      ' Sets the CurrentCulture to "da-DK".
      Dim dk As New CultureInfo("da-DK")
      Thread.CurrentThread.CurrentCulture = dk
      
      ' Creates a culturally sensitive sort key for str1.
      Dim sc1 As SortKey = dk.CompareInfo.GetSortKey(str1)
      ' Create a culturally sensitive sort key for str2.
      Dim sc2 As SortKey = dk.CompareInfo.GetSortKey(str2)
      
      ' Compares the two sort keys and display the results.
      Dim result1 As Integer = SortKey.Compare(sc1, sc2)
      Console.WriteLine(ControlChars.Newline + "When the CurrentCulture _
         is ""da-DK""," + ControlChars.Newline + " the result of _
         comparing {0} with {1} is: {2}", str1, str2, result1)
      
      ' Sets the CurrentCulture to "en-US".
      Dim enus As New CultureInfo("en-US")
      Thread.CurrentThread.CurrentCulture = enus
      
      ' Creates a culturally sensitive sort key for str1.
      Dim sc3 As SortKey = enus.CompareInfo.GetSortKey(str1)
      ' Create a culturally sensitive sort key for str1.
      Dim sc4 As SortKey = enus.CompareInfo.GetSortKey(str2)
      
      ' Compares the two sort keys and display the results.
      Dim result2 As Integer = SortKey.Compare(sc3, sc4)
      Console.WriteLine(ControlChars.Newline + "When the CurrentCulture _
         is ""en-US""," + ControlChars.Newline + " the result of _
         comparing {0} with {1} is: {2}", str1, str2, result2)
   End Sub
End Class
using System;
using System.Threading;
using System.Globalization;

public class SortKeySample 
{
   public static void Main(String[] args) 
   {
      String str1 = "Apple";
      String str2 = "Æble";

      // Sets the CurrentCulture to "da-DK".
      CultureInfo dk = new CultureInfo("da-DK");
      Thread.CurrentThread.CurrentCulture = dk;

      // Creates a culturally sensitive sort key for str1.
      SortKey sc1 = dk.CompareInfo.GetSortKey(str1);
      // Create a culturally sensitive sort key for str2.
      SortKey sc2 = dk.CompareInfo.GetSortKey(str2);

      // Compares the two sort keys and display the results.
      int result1 = SortKey.Compare(sc1, sc2);
      Console.WriteLine("\nWhen the CurrentCulture is \"da-DK\",\nthe 
            result of comparing {0} with {1} is: {2}", str1, str2, 
            result1);

      // Sets the CurrentCulture to "en-US".
      CultureInfo enus = new CultureInfo("en-US");
      Thread.CurrentThread.CurrentCulture = enus ;

      // Creates a culturally sensitive sort key for str1.
      SortKey sc3 = enus.CompareInfo.GetSortKey(str1);
      // Create a culturally sensitive sort key for str1.
      SortKey sc4 = enus.CompareInfo.GetSortKey(str2);

      // Compares the two sort keys and display the results.
      int result2 = SortKey.Compare(sc3, sc4);
      Console.WriteLine("\nWhen the CurrentCulture is \"en-US\",\nthe 
            result of comparing {0} with {1} is: {2}", str1, str2, 
            result2);
   }
}

Ce code génère la sortie suivante :

When the CurrentCulture is "da-DK", 
the result of comparing Apple with Æble is: -1

When the CurrentCulture is "en-US", 
the result of comparing Apple with Æble is: 1

Normalisation

Votre application normaliser des chaînes en majuscules ou en minuscules avant le tri. Les règles de tri des chaînes et de choix de la casse sont spécifiques à la langue. Par exemple, même dans les langues latines, il y a des règles de composition et de tri différentes. Il n'y a que quelques langues (dont l'anglais) qui utilisent un ordre de tri correspondant à l'ordre des points de code (par exemple, A [65] précède B [66]).

Vos applications ne doivent pas compter sur les points de code pour effectuer un tri et des comparaisons de chaînes précis. De plus, le .NET Framework n'applique ni ne garantit aucune forme spécifique de normalisation. C'est à vous qu'il incombe d'effectuer la normalisation appropriée dans les applications que vous développez.

Pour plus d'informations sur la normalisation de chaînes, consultez Normalisation et tri.

Voir aussi

Concepts

Opérations de chaînes indépendantes de la culture

Normalisation et tri

Autres ressources

Codage et localisation