Compartir a través de


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

Actualización: noviembre 2007

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 en minúsculas del carácter "I" (Unicode 0049). Sin embargo, el alfabeto turco tiene dos versiones del carácter "I": una con punto y otra sin punto. En turco, el carácter "I" (Unicode 0049) se considera la versión en mayúsculas de un carácter "I" diferente (Unicode 0131). El carácter "I" (Unicode 0069) se considera la versión en minúsculas de otro carácter "İ" adicional (Unicode 0130). Como resultado, 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 sería correcta en la mayoría de las referencias culturales, produciría un error en la referencia cultural turco (Turquía), designada como "tr-TR".

Nota:

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

En el siguiente ejemplo de código se muestra cómo el resultado de una operación 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 CurrentCulture está establecida en la referencia cultural inglés (Estados Unidos), designada como "en-US". La comparación devuelve false si CurrentCulture está establecido en turco (Turquía), designada como "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));
    }
}

Los siguientes resultados 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

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 a Unicode 007F) contienen pares de dos letras para los que el resultado de una comparación que no tiene en cuenta las mayúsculas y minúsculas, como cuando se usa Compare(), no se evalúan como iguales cuando se mezclan mayúsculas y minúsculas. Estas referencias culturales son:

  • Croata (Croacia), "hr-HR"

  • Checo (República Checa), "cs-CZ"

  • Eslovaco (Eslovenia), "sk-SK"

  • Danés (Dinamarca), "da-DK"

  • Noruego (Bokmål, Noruega), "nb-NO"

  • Noruego (Nynorsk, Noruega), "nn-NO"

  • Húngaro (Hungría), "hu-HU"

  • Vietnamita (Vietnam), "vi-VN"

  • Español (España, ordenación tradicional), "es-ES_tradnl"

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:

  • Estonio (Estonia), "et-EE"

  • Finés (Finlandia), "fi-FI"

  • Húngaro (Hungría, criterio de ordenación técnica), "hu-HU_technl"

  • Lituano (Lituania), "lt-LT"

  • Sueco (Finlandia), "sv-FI"

  • Sueco (Suecia), "sv-SE"

Por ejemplo, en el alfabeto sueco, la letra "w" se ordena como si fuera la letra "v". En el código de aplicación, las operaciones de ordenación tienden a ser utilizadas con menos frecuencia que las comparaciones de igualdad y, por consiguiente, es menos probable que causen 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 consiguiente, la probabilidad de que causen problemas es poca.

Para obtener información detallada sobre las asignaciones personalizadas de mayúsculas y minúsculas y las reglas de ordenación que se aplican a referencias culturales concretas, vea el estándar Unicode en Unicode home page.

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