Partilhar via


Mapeamentos de maiúsculas personalizados e regras de classificação

Mapeamentos de maiúsculas, ordem alfabética e convenções para itens de seqüenciamento variam de culturas. Você deve estar atento essas variações e entender o que eles podem causar os resultados das operações de seqüência de caracteres para variar dependendo da cultura.

As regras de mapeamento de caso exclusivas para o alfabeto turco ilustram como letras maiúsculos e minúsculos de mapeamentos difere de linguagem para o mesmo quando usarem a maioria das mesmas letras. Na maioria dos alfabetos latinos, o caractere "I" (Unicode 0069) é a versão em letra minúscula do caractere "I" (Unicode 0049). No entanto, o alfabeto turco tem duas versões do caractere "I": um com um ponto e sem um ponto. Em turco, o caractere "I" (Unicode 0049) é considerada a versão em maiúsculas de um caractere diferente "I" (Unicode 0131). O caractere "I" (Unicode 0069) é considerada a versão em minúsculas do ainda outro caractere "İ" (Unicode 0130). Como resultado, uma comparação de seqüência de caracteres de maiúsculas e minúsculas dos caracteres "I" (Unicode 0069) e "I" (Unicode 0049) com sucesso para a maioria das culturas falhar para a cultura Turco (Turquia) designada "tr-TR".

Observação

A cultura Azeri (latino, Azerbaijão), designado "az-Latn-AZ", também usa esta regra de mapeamento do caso.

O exemplo de código a seguir demonstra como o resultado de um diferencia String.Compare operação realizada em seqüências de caracteres "Arquivo" e "arquivo" difere dependendo da cultura. A comparação retorna true se a Thread.CurrentThread.CurrentCulture for definida como a cultura inglês (Estados Unidos), designado "en-US". A comparação retorna false se a cultura atual é definida como Turco (Turquia), designado "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));
    }
}

A saída a seguir ilustra como os resultados variam de acordo com a cultura, porque a comparação de maiúsculas e minúsculas de "Eu" e o "I" avalia a true para "en-US" cultura e false para "tr-TR" cultura.

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

Mapeamentos de maiúsculas personalizadas adicionais e regras de classificação

Além de para os mapeamentos de casos exclusivos usados em caracteres alfabéticos de turco e Azeri, existem outros mapeamentos de maiúsculas personalizados e regras de classificação que você deve estar ciente ao considerar as operações de cadeia de caracteres. Os alfabetos de nove culturas no intervalo ASCII (Unicode 0000 por meio do Unicode 007F) contém pares de duas letras para o qual o resultado de uma comparação diferenciando maiúsculas de minúsculas, por exemplo, usando String.Compare, não avalia igual a quando o caso for mixed. Essas culturas são:

  • Croata (Croácia), "hr-HR."

  • Tcheco (República Tcheca), "cs-CZ"

  • Eslovaco (Eslovênia), "sk-SK"

  • Dinamarquês (Dinamarca), "da-DK"

  • Norueguês (Bokmål, Noruega) "não-nb"

  • Norueguês (Nynorsk, Noruega) "não-nn"

  • Húngaro (Hungria), "hu-HU"

  • Vietnamita (Vietnã), "vi VN."

  • Espanhol (Espanha, tipo tradicional), "es-ES_tradnl"

Por exemplo, no idioma dinamarquês, uma comparação entre maiúsculas e minúsculas dos pares de duas letras "aA" e "AA" não é considerado igual. O alfabeto vietnamita, uma comparação entre maiúsculas e minúsculas dos pares de duas letras "ção" e "ÇÃO" não é considerado igual. Embora você deve estar ciente de que essas regras existem, na prática, é incomum executar em uma situação onde uma comparação de cultura desses pares cria problemas,, pois são incomuns em identificadores ou seqüências de caracteres fixas.

Os alfabetos das seis culturas dentro do intervalo ASCII têm regras padrão de maiúsculas e minúsculas, mas as regras de classificação diferentes. Essas culturas são:

  • Estoniano (Estônia), "et-EE"

  • Finlandês (Finlândia), "fi-FI"

  • Húngaro (Hungria, ordem de classificação técnica), "hu-HU_technl"

  • Lituano (Lituânia), "lt-LT"

  • Sueco (Finlândia), "sv-FI"

  • Sueco (Suécia), "sv-SE"

Por exemplo, no alfabeto sueco, a letra "w" classifica como se fosse a letra "v". No código do aplicativo, operações de classificação tendem a ser usado com menos freqüência que comparações de igualdade em, portanto, menos probabilidade de criar problemas.

Um culturas 35 adicionais têm mapeamentos personalizados de maiúsculas e as regras de classificação fora do intervalo ASCII. Essas regras são geralmente confinadas os alfabetos usados das culturas específicas. Portanto, a probabilidade de que elas causarão problemas é baixa.

Para detalhes sobre personalizada caso mapeamentos e classificar regras aplicáveis para culturas específicas, consulte o padrão Unicode na Unicode home page.

Consulte também

Conceitos

Operações de cadeia de caracteres com diferenciação de cultura

Outros recursos

Executar operações de cadeia de caracteres com diferenciação de cultura