Compartir a través de


Asignaciones personalizadas de mayúsculas y minúsculas, y reglas de ordenación

Las asignaciones de mayúsculas y minúsculas, el orden alfabético y las convenciones para establecer secuencias de elementos varían según las referencias culturales. Estas variaciones deben tenerse en cuenta y entender que pueden hacer que los resultados de las operaciones de cadenas cambien dependiendo de la referencia cultural.

Las reglas únicas de la asignación de mayúsculas y minúsculas del alfabeto turco ilustran cómo la asignación de mayúsculas y minúsculas difiere de idioma a idioma, incluso cuando utilizan en su mayor parte las mismas letras. En la mayoría de los alfabetos latinos, el carácter i (Unicode 0069) es la versión minúscula del carácter I (Unicode 0049). Sin embargo, el alfabeto turco tiene dos versiones del carácter I: una con un punto y otra sin él. En turco, el carácter I (Unicode 0049) se considera la versión mayúscula de un carácter diferente, ı (Unicode 0131). El carácter i (Unicode 0069) se considera la versión minúscula del carácter İ (Unicode 0130). Por consiguiente, una comparación de cadenas que no tenga en cuenta las mayúsculas y minúsculas de los caracteres i (Unicode 0069) e I (Unicode 0049), que tendría éxito en la mayoría de las referencias culturales, fallaría para la referencia cultural "tr-TR" (turco de Turquía).

En el siguiente ejemplo de código se muestra cómo el resultado de una operación String.Compare que no tiene en cuenta las mayúsculas y minúsculas, realizada sobre las cadenas "FILE" y "file", difiere dependiendo de la referencia cultural. La comparación devuelve true si la propiedad Thread.CurrentCulture se establece como "en-US" (inglés de Estados Unidos). La comparación devuelve false si CurrentCulture se establece como "tr-TR" (turco de Turquía).

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));
    }
}

Los siguientes resultados en la consola muestran cómo éstos pueden cambiar en función de la referencia cultural, ya que la comparación de i e I que no tiene en cuenta las mayúsculas y minúsculas se evalúa como true para la referencia cultural "en-US" y como false para la referencia cultural "tr-TR".

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

Nota

La referencia cultural "az -AZ-Latn" (azerí (latín) de Azerbaiyán) utiliza también esta regla de asignación de mayúsculas y minúsculas.

Otras asignaciones personalizadas de mayúsculas y minúsculas, y reglas de ordenación

Además de las asignaciones únicas de mayúsculas y minúsculas utilizadas en los alfabetos turco y azerí, hay otras asignaciones personalizadas de mayúsculas y minúsculas que deberían ser tenidas en cuenta al realizar operaciones de cadenas. Los alfabetos de nueve referencias culturales en el intervalo ASCII (Unicode 0000- Unicode 007F) contienen pares de dos letras donde el resultado de una comparación que no tiene en cuenta las mayúsculas y minúsculas, como String.Compare, no se evalúa como igual cuando se mezclan mayúsculas y minúsculas. Estas referencias culturales son "hr-HR" (croata de Croacia), "cs-CZ" (checo de la República Checa), "sk-SK" (eslovaco de Eslovaquia), "da-DK" (Danés de Dinamarca), "nb-NO" (Noruego (bokmal) de Noruega), "nn-NO" (Noruego (nynorsk) de Noruega), "hu-HU" (húngaro de Hungría), "vi-VN" (vietnamita de Vietnam) y "es-ES" (español de España) utilizando un criterio de ordenación tradicional. Por ejemplo, en danés, una comparación que no tiene en cuenta las mayúsculas y minúsculas de los pares de dos letras aA y AA no se considera igual. En el alfabeto vietnamita, una comparación que no tiene en cuenta las mayúsculas y minúsculas de los pares de dos letras nG y NG no se considera igual. Aunque se debería tener conocimiento de la existencia de estas reglas, en la práctica, no es habitual encontrarnos con una situación en que la comparación de estos pares, sin tener en cuenta las mayúsculas y minúsculas cree problemas, porque es raro que aparezcan en identificadores o cadenas fijas.

Los alfabetos de seis referencias culturales dentro del intervalo ASCII tienen reglas estándar de mayúsculas y minúsculas, pero tienen reglas de ordenación diferentes. Estas referencias culturales son "et-EE" (estoniano de Estonia), "fi-FI" (finlandés de Finlandia), "hu-HU" (húngaro de Hungría) utilizando el criterio de ordenación técnica, "lt-LT" (lituano de Lituania), "sv-FI" (sueco de Finlandia), y "sv-SE" (sueco de Suecia). Por ejemplo, en el alfabeto sueco, la letra w se ordena como si fuera la letra v. En el código de la aplicación, las operaciones de ordenación tienden a usarse menos frecuentemente que las comparaciones de igualdad, y son por lo tanto menos proclives a dar problemas.

Otras 35 referencias culturales tienen asignaciones personalizadas de mayúsculas y minúsculas y reglas de ordenación fuera del intervalo ASCII. Estas reglas están generalmente confinadas a los alfabetos que usan esas referencias culturales específicas. Por lo tanto, la probabilidad de que causen problemas es baja.

Para obtener más detalles sobre las asignaciones personalizadas de mayúsculas y minúsculas y las reglas de ordenación que se aplican a referencias culturales específicas vea el estándar Unicode en www.unicode.org.

Vea también

Conceptos

Operaciones de cadenas que no distinguen entre referencias culturales

Otros recursos

Realizar operaciones de cadenas que no distinguen entre referencias culturales