Regole di ordinamento e mapping di maiuscole e minuscole personalizzati

I mapping di maiuscole e minuscole, l'ordine alfabetico e le convenzioni per la sequenza di elementi variano in base alle impostazioni cultura. È opportuno considerare tali variazioni e comprendere come possano determinare risultati diversi a seconda delle impostazioni cultura nelle operazioni sulle stringhe.

Le esclusive regole di mapping di maiuscole e minuscole per l'alfabeto turco consentono di illustrare come i mapping di maiuscole e minuscole possano differire anche in lingue in cui vengono utilizzate per la maggior parte le stesse lettere. Nella maggior parte degli alfabeti latini, il carattere "I" (Unicode 0069) costituisce la versione minuscola del carattere "I" (Unicode 0049). L'alfabeto turco, tuttavia, presenta due versioni del carattere "I": una con un punto e una senza punto. Nella lingua turca, il carattere "I" (Unicode 0049) è considerato la versione in maiuscolo di un altro carattere "I" (Unicode 0131). Il carattere "I" (Unicode 0069) è considerato la versione in minuscolo di un altro carattere "İ" (Unicode 0130). Di conseguenza, un confronto tra stringhe senza distinzione tra maiuscole e minuscole dei caratteri "I" (Unicode 0069) e "I" (Unicode 0049), che ha esito positivo nella maggior parte delle impostazioni cultura, avrà invece esito negativo nelle impostazioni cultura relative alla lingua turca parlata in Turchia, designata "tr-TR".

NotaNota

Questa regola di mapping di maiuscole e minuscole viene inoltre utilizzata dalle impostazioni cultura relative alla lingua azera, con alfabeto latino, parlata in Azerbaijan e designata "az-AZ-Latn".

Nell'esempio di codice riportato di seguito vengono illustrate le differenze determinate dalle impostazioni cultura nel risultato di un'operazione String.Compare senza distinzione tra maiuscole e minuscole eseguita sulle stringhe "FILE" e "file". Il confronto restituirà true se la proprietà Thread.CurrentThread.CurrentCulture è impostata sulle impostazioni cultura relative alla lingua inglese parlata negli Stati Uniti, designata "en-US". Il confronto restituirà false se le impostazioni cultura correnti sono impostate sulla lingua turca parlata in Turchia, designata "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));
    }
}

Nell'output riportato di seguito vengono illustrate le differenze nei risultati determinate dalle impostazioni cultura, dovute al fatto che il confronto senza distinzione tra maiuscole e minuscole tra "I" e "I" restituisce true per le impostazioni cultura "en-US" e false per le impostazioni cultura "tr-TR".

Culture = English (United States)
(file == FILE) = True
Culture = Turkish (Turkey)
(file == FILE) = False

Ulteriori regole di ordinamento e mapping di maiuscole e minuscole personalizzati

In aggiunta ai mapping di maiuscole e minuscole univoci utilizzati nell'alfabeto turco e in quello azero, sono presenti ulteriori regole di ordinamento e mapping di maiuscole e minuscole personalizzati che è opportuno tenere in considerazione nell'esecuzione di operazioni sulle stringhe. Gli alfabeti di nove impostazioni cultura nell'intervallo ASCII, da Unicode 0000 a Unicode 007F contengono coppie di due lettere per le quali un confronto senza distinzione tra maiuscole e minuscole, effettuato ad esempio mediante String.Compare, non restituisce un risultato di uguaglianza in caso di combinazione di maiuscole e minuscole. Tali impostazioni cultura sono:

  • Lingua croata parlata in Croazia, "hr-HR"

  • Lingua ceca parlata nella Repubblica Ceca, "cs-CZ"

  • Lingua slovacca parlata in Slovenia, "sk-SK"

  • Lingua danese parlata in Danimarca, "da-DK"

  • Lingua norvegese bokmål parlata in Norvegia, "nb-NO"

  • Lingua norvegese nynorsk parlata in Norvegia, "nn-NO"

  • Lingua ungherese parlata in Ungheria, "hu-HU"

  • Lingua vietnamita parlata in Vietnam, "vi-VN"

  • Lingua spagnola parlata in Spagna, ordinamento tradizionale, "es-ES_tradnl"

Nell'alfabeto danese, ad esempio, le coppie di due lettere "aA" e "AA" non vengono considerate uguali in un confronto senza distinzione tra maiuscole e minuscole. Nell'alfabeto vietnamita, in un confronto senza distinzione tra maiuscole e minuscole non vengono considerate uguali le coppie di due lettere "nG" e "NG". Sebbene sia opportuno essere a conoscenza di queste regole, nella pratica si verificano raramente situazioni in cui un confronto dipendente dalle impostazioni cultura di queste coppie causa dei problemi, poiché in genere non vengono utilizzate in stringhe fisse o identificatori.

Gli alfabeti di sei impostazioni cultura nell'intervallo ASCII dispongono di regole standard per la gestione di maiuscole e minuscole, ma di regole di ordinamento diverse. Tali impostazioni cultura sono:

  • Lingua estone parlata in Estonia, "et-EE"

  • Lingua finlandese parlata in Finlandia, "fi-FI"

  • Lingua ungherese parlata in Ungheria, ordinamento tecnico, "hu-HU_technl"

  • Lingua lituana parlata in Lituania, "lt-LT"

  • Lingua svedese parlata in Finlandia, "sv-FI"

  • Lingua svedese parlata in Svezia, "sv-SE"

Nell'alfabeto svedese, ad esempio, l'ordinamento della lettera "w" è lo stesso della lettera "v". Nel codice dell'applicazione, le operazioni di ordinamento vengono utilizzate con minore frequenza rispetto al confronto di uguaglianza e pertanto è meno probabile che possano causare dei problemi.

Altre 35 impostazioni cultura dispongono di regole di ordinamento e mapping di maiuscole e minuscole personalizzati all'esterno dell'intervallo ASCII. Poiché queste regole sono in genere limitate agli alfabeti utilizzati dalle specifiche impostazioni cultura, è altamente improbabile che possano causare dei problemi.

Per informazioni dettagliate sulle regole di ordinamento e sui mapping di maiuscole e minuscole personalizzati applicabili a impostazioni cultura specifiche, vedere la home page dello standard Unicode (informazioni in lingua inglese).

Vedere anche

Concetti

Operazioni sulle stringhe indipendenti dalle impostazioni cultura

Altre risorse

Esecuzione di operazioni sulle stringhe indipendenti dalle impostazioni cultura