Mappages de casse et règles de tri personnalisés
Les mappages de casse, l'ordre alphabétique et les conventions de classement d'éléments varient d'une culture à l'autre. Vous devez tenir compte de ces variations et comprendre qu'elles peuvent faire varier les résultats des opérations de chaînes en fonction de la culture.
Les règles de mappage de casse propres à l'alphabet turc illustrent comment les mappages de majuscules et de minuscules varient d'une langue à une autre, même lorsque celles-ci utilisent quasiment les mêmes lettres. Dans la plupart des alphabets latins, le caractère i (Unicode 0069) correspond à la version en minuscules du caractère I (Unicode 0049). Or il se trouve que l'alphabet turc possède deux versions du caractère I : un caractère avec un point, un autre sans point. En turc, le caractère I (Unicode 0049) est considéré comme la version majuscule d'un caractère différent ı (Unicode 0131). Le caractère i (Unicode 0069) est considéré comme la version minuscule d'un autre caractère İ (Unicode 0130). Par conséquent, une comparaison de chaînes qui ne respectent pas la casse des caractères i (Unicode 0069) et I (Unicode 0049) qui s'effectue normalement pour la plupart des cultures n'aboutit pas pour la culture "tr-TR" (turc de Turquie).
L'exemple de code suivant illustre la manière dont le résultat d'une opération String.Compare qui ne respecte pas la casse et effectuée sur les chaînes "FILE" et "file" diffère selon la culture. La comparaison retourne true si la propriété Thread.CurrentCulture a la valeur "en-US" (anglais aux Etats-Unis). La comparaison retourne false si CurrentCulture a la valeur "tr-TR" (turc de Turquie).
Imports System
Imports System.Globalization
Imports System.Threading
Public Class TurkishISample
Public Shared Sub Main()
' Set the CurrentCulture property to English in the U.S.
Thread.CurrentThread.CurrentCulture = New CultureInfo("en-US")
Console.WriteLine("Culture = {0}", _
Thread.CurrentThread.CurrentCulture.DisplayName)
Console.WriteLine("(file == FILE) = {0}", String.Compare("file", _
"FILE", True) = 0)
' Set the CurrentCulture property to Turkish in Turkey.
Thread.CurrentThread.CurrentCulture = New CultureInfo("tr-TR")
Console.WriteLine("Culture = {0}", _
Thread.CurrentThread.CurrentCulture.DisplayName)
Console.WriteLine("(file == FILE) = {0}", String.Compare("file", _
"FILE", True) = 0)
End Sub
End Class
using System;
using System.Globalization;
using System.Threading;
public class TurkishISample
{
public static void Main()
{
// Set the CurrentCulture property to English in the U.S.
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
Console.WriteLine("Culture = {0}",
Thread.CurrentThread.CurrentCulture.DisplayName);
Console.WriteLine("(file == FILE) = {0}", (string.Compare("file",
"FILE", true) == 0));
// Set the CurrentCulture property to Turkish in Turkey.
Thread.CurrentThread.CurrentCulture = new CultureInfo("tr-TR");
Console.WriteLine("Culture =
{0}",Thread.CurrentThread.CurrentCulture.DisplayName);
Console.WriteLine("(file == FILE) = {0}", (string.Compare("file",
"FILE", true) == 0));
}
}
Le résultat suivant dans la console illustre la manière dont les résultats peuvent varier selon la culture, car la comparaison qui ne respecte pas la casse de i et I prend la valeur true pour la culture "en-US" et false pour la culture "tr-TR".
Culture = English (United States)
(file == FILE) = True
Culture = Turkish (Turkey)
(file == FILE) = False
Notes
La culture "az -AZ-Latn" (Azéri (Latin) en Azerbaïdjan) utilise également cette règle de mappage de casse.
Autres mappages de casse et règles de tri personnalisés
Outre les mappages de casse propres aux alphabets turc et azéri, il existe d'autres règles personnalisées de mappages et de tri que vous devez connaître lorsque vous effectuez des opérations de chaînes. Les alphabets de neuf cultures dans l'intervalle ASCII (Unicode 0000 - Unicode 007F) contiennent deux paires de lettres pour lesquelles le résultat d'une comparaison qui ne respecte pas la casse, telle que String.Compare, n'est pas égal lorsque la casse est mixte. Ces cultures sont "hr-HR" (croate en Croatie), "cs-CZ" (tchèque en république Tchèque), "sk-SK" (Slovaque en Slovaquie), "da-DK" (danois au Danemark), "nb-NO" (Norwegian (Bokmal) in Norway), "nn-NO" (norvégien (Nynorsk) en Norvège), "hu-HU" (hongrois en Hongrie), "vi-VN" (vietnamien au Vietnam) et "es-ES" (espagnol en Espagne) utilisant l'ordre de tri traditionnel. Par exemple, dans la langue danoise, une comparaison ne respectant pas la casse des paires de lettres aA et AA n'est pas considérée comme égale. Dans l'alphabet vietnamien, une comparaison ne respectant pas le casse des paires de lettres nG et NG n'est pas considérée comme égale. Certes, vous devez savoir que ces règles existent, mais dans la pratique, il est rare d'être confronté à une situation où une comparaison de ces paires, dépendante de la culture, crée des problèmes, car elles ne sont pas courantes dans les identificateurs ni les chaînes fixes.
Les alphabets de six cultures comprises dans l'intervalle ASCII présentent des règles de casse standard, mais des règles de tri différentes. Ces cultures sont "et-EE" (estonien en Estonie), "fi-FI" (finnois en Finlande), "hu-HU" (hongrois en Hongrie) utilisant l'ordre de tri technique, "lt-LT" (lituanien en Lituanie), "sv-FI" (suédois en Finlande) et "sv-SE" (Suédois en Suède). Par exemple, dans l'alphabet suédois, la lettre w est triée comme s'il s'agissait de la lettre v. Dans du code d'application, les opérations de tri ont tendance à être utilisées moins fréquemment que les comparaisons d'égalité et par conséquent, elles sont moins susceptibles de créer des problèmes.
35 autres cultures présentent des mappages de casse et des règles de tri personnalisés en dehors de l'intervalle ASCII. Ces règles sont généralement limitées aux alphabets utilisés par ces cultures spécifiques. Par conséquent, la probabilité qu'elles génèrent des problèmes est faible.
Pour plus d'informations sur les mappages de casse et les règles de tri personnalisés s'appliquant à des cultures spécifiques, consultez la norme Unicode à l'adresse http://www.unicode.org.
Voir aussi
Concepts
Opérations de chaînes indépendantes de la culture
Autres ressources
Exécution d'opérations de chaînes indépendantes de la culture