Condividi tramite


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 alla lingua. È opportuno considerare tali variazioni e comprendere come possano determinare risultati diversi a seconda della lingua 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, dispone di due versioni del carattere I: una con un punto e una senza. In tale alfabeto, il carattere I (Unicode 0049) viene considerato come la versione maiuscola di un diverso carattere ı (Unicode 0131), mentre il carattere i (Unicode 0069) viene considerato come la versione minuscola 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 lingue, avrà invece esito negativo nella lingua "tr-TR" (turco, Turchia).

Nell'esempio di codice riportato di seguito vengono illustrate le differenze determinate dalla lingua 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.CurrentCulture è impostata su "en-US" (inglese, Stati Uniti). Restituirà invece false se CurrentCulture è impostata su "tr-TR" (turco, Turchia).

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 della console riportato di seguito vengono illustrate le variazioni nei risultati determinate dalla lingua, a causa del fatto che il confronto senza distinzione tra maiuscole e minuscole di i e I restituisce true per la lingua "en-US" e false per la lingua "tr-TR".

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

Nota

Questa regola di mapping di maiuscole e minuscole viene inoltre utilizzata dalla lingua "az -AZ-Latn" (azero, alfabeto latino, Azerbaijan).

Ulteriori regole di ordinamento e mapping di maiuscole e minuscole personalizzati

In aggiunta agli esclusivi mapping di maiuscole e minuscole utilizzati nell'alfabeto turco e azero, sono presenti ulteriori mapping di maiuscole e minuscole e regole di ordinamento personalizzati che è opportuno tenere in considerazione in occasione dell'esecuzione di operazioni sulle stringhe. Gli alfabeti di nove lingue nell'intervallo ASCII (Unicode 0000- 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. Queste lingue sono costituite da "hr-HR" (croato, Croazia), "cs-CZ" (ceco, Repubblica Ceca), "sk-SK" (slovacco, Slovacchia), "da-DK" (danese, Danimarca), "nb-NO" (norvegese Bokmal, Norvegia), "nn-NO" (norvegese Nynorsk, Norvegia), "hu-HU" (ungherese, Ungheria), "vi-VN" (vietnamita, Vietnam) e "es-ES" (spagnolo, Spagna) con il criterio di ordinamento tradizionale. Nella lingua 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 dalla lingua di queste coppie causa dei problemi, poiché in genere non vengono utilizzate in stringhe fisse o identificatori.

Gli alfabeti di sei lingue nell'intervallo ASCII dispongono di regole standard per la gestione di maiuscole e minuscole, ma di regole di ordinamento diverse. Queste lingue sono costituite da "et-EE" (estone, Estonia), "fi-FI" (finlandese, Finlandia), "hu-HU" (ungherese, Ungheria) con il criterio di ordinamento tecnico, "lt-LT" (lituano, Lituania), "sv-FI" (svedese, Finlandia) e "sv-SE" (svedese, Svezia). Nell'alfabeto svedese, ad esempio, la lettera w viene ordinata come se si trattasse della lettera v. Nel codice dell'applicazione, le operazioni di ordinamento vengono in genere utilizzate con minore frequenza rispetto ai confronti di uguaglianza ed è quindi meno probabile che causino problemi.

Altre 35 lingue 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 da queste specifiche lingue, è scarsamente probabile che possano determinare dei problemi.

Per informazioni dettagliate sulle regole di ordinamento e sui mapping di maiuscole e minuscole personalizzati applicabili a lingue specifiche, vedere lo standard Unicode all'indirizzo www.unicode.org (informazioni in lingua inglese).

Vedere anche

Concetti

Operazioni sulle stringhe indipendenti dalla lingua

Altre risorse

Esecuzione di operazioni sulle stringhe indipendenti dalla lingua