Normalização e classificação

Alguns caracteres Unicode tem vários equivalente binário representações consiste em conjuntos de combinação e/ou compostos caracteres Unicode.Conseqüentemente, duas cadeias de caracteres podem parecer idênticas mas, na verdade, conter caracteres diferentes.A existência de várias representações para um único caractere complica a operações de classificação.A solução para esse problema é normalizar cada seqüência de caracteres, em seguida, use uma comparação ordinal para classificar as seqüências de caracteres.

O padrão Unicode define um processo chamado de normalização que retorna um binário representação de um caractere quando é fornecida com qualquer uma das equivalente binário representações de caractere.O padrão Unicode define quatro diferentes algoritmos, chamados de formulários de normalização, que você pode usar para normalizar uma seqüência de caracteres.Cada formulário de normalização obedece às regras diferentes e, portanto, gera um diferente binário representação de uma seqüência de caracteres de entrada.No entanto, se duas seqüências de caracteres são normalizadas ao mesmo formulário de normalização, as seqüências de caracteres, em seguida, podem ser comparadas usando uma comparação ordinal (não diferenciar maiúsculas de minúsculas).

Uma comparação ordinal de duas seqüências de caracteres é uma comparação binária do valor numérico ou ponto de código de cada emparelhar correspondente de Char estruturas das duas String objetos que representam as seqüências de caracteres normalizadas. O .NET estrutura fornece vários métodos que podem executar uma comparação ordinal.

Seu aplicativo pode usar o seguinte processo para normalizar e classificar cadeias de caracteres:

  1. Obter duas cadeias de caracteres a ser classificado de uma fonte de entrada sistema autônomo um arquivo ou entrada do usuário.

  2. Use o String.Normalize() método para normalizar as duas seqüências de caracteres para formulário de normalização C, ou o String.Normalize(NormalizationForm) método para normalizar as duas seqüências de caracteres a um formulário de normalização de sua escolha.

  3. Use uma comparação ordinal de seqüência de caracteres, sistema autônomo a Compare(String, Int32, String, Int32, Int32, StringComparison) método com um Ordinal ou OrdinalIgnoreCase valor, para comparar sistema autônomo duas seqüências de caracteres. A operação de comparação determina se a primeira seqüência de caracteres lexicalmente precede o segundo ou as duas seqüências são lexicalmente iguais.

  4. Emita as seqüências de caracteres na saída classificada com base nos resultados da etapa 3.Se as seqüências de caracteres não forem iguais, emita as seqüências de caracteres na ordem em que obtém a ordem crescente ou decrescente.

    Se as seqüências forem iguais, qualquer seqüência de caracteres pode ser emitida pela primeira vez da menos que seja apropriado para organizar as seqüências de caracteres com base em algumas características diferentes de ordem léxica.Por exemplo, se o aplicativo está classificando nomes de arquivo, mas também gravar as propriedades de cada arquivo de saída, ele pode escrever nomes de arquivo igual na ordem de suas datas de criação do arquivo.

  5. Repetir esse processo até que toda entrada é classificada.

Para obter mais informações sobre o suporte de formulário de normalização no .NET estrutura, consulte a descrição do NormalizationForm enumeração. Para obter mais informações sobre normalização uma seqüência de caracteres, consulte o Normalize método.

Para obter mais informações sobre a normalização e caractere decompositions equivalência, consulte Unicode Standard Annex # 15, "Formulários de normalização unicode", nasSite inicial Unicode.

Consulte também

Conceitos

Normalização

Classificação com culturas

Comparando e classificando dados para uma cultura específica

Outros recursos

Codificação e localização