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) est considéré comme la version minuscule du caractère I (Unicode 0049). Toutefois, l'alphabet turc possède deux versions du caractère I : la première avec un point et la seconde sans point. En turc, le caractère I (Unicode 0049) est considéré comme la version majuscule d'un autre caractère I (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 respecte pas la casse des caractères I (Unicode 0069) et I (Unicode 0049) qui réussit pour la plupart des cultures échoue pour la culture turque (Turquie), désignée sous la forme « tr-TR ».
Remarque |
---|
La culture Azéri (Azerbaïdjan, latin), désignée par « az-Latn-AZ », utilise également cette règle de casse. |
L'exemple de code suivant illustre la manière dont le résultat d'une comparaison de chaînes ne respectant pas la casse String.Compare opère de façon différente sur les chaînes « FILE » et « file » selon la culture. La comparaison retourne true si la propriété Thread.CurrentThread.CurrentCulture a la valeur de la culture Anglais (États-Unis), désignée par « en-US ». La comparaison retourne false si la culture actuelle a la valeur Turc (Turquie), désignée par « tr-TR ».
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 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
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 des neuf cultures de 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 égale lorsque la casse est mixte. Ces cultures sont :
Croate (Croatie), « hr-HR »
Tchèque (République tchèque), « cs-CZ »
Slovaque (Slovénie), « sk-SK »
Danois (Danemark), « da-DK"
Norvégien (Bokmål, Norvège), « nb-NO »
Norvégien (Nynorsk, Norvège), « nn-NO »
Hongrois (Hongrie), « hu-HU »
Vietnamien (Vietnam), « vi-VN »
Espagnol (Espagne, tri traditionnel), « es-ES_tradnl »
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 la 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 :
Estonien (Estonie), « et-EE »
Finlandais (Finlande), « fi-FI »
Hongrois (Hongrie, ordre de tri technique), « hu-HU_technl »
Lituanien (Lituanie), « lt-LT »
Suédois (Finlande), « sv-FI »
Suédois (Suède), « sv-SE »
Par exemple, dans l'alphabet suédois, la lettre « w » est triée de la même façon que la lettre « v ». Dans le code d'application, les opérations de tri ont tendance à être moins fréquemment utilisées que les comparaisons d'égalité et par conséquent il est moins probable de rencontrer 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 provoquent des problèmes est faible.
Pour plus d'informations sur les mappages personnalisés et règles de tri qui s'appliquent aux cultures spécifiques, consultez la norme Unicode sur la page d'accueil d'Unicode.
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