Compartilhar via


Normalização e classificação

Alguns caracteres Unicode tem várias representações binárias equivalentes consistindo de conjuntos de combinar e/ou caracteres Unicode de composição. Conseqüentemente, duas cadeias de caracteres podem parecer idênticas, mas na verdade consistem em caracteres diferentes. A existência de várias representações para um único caractere complica as operações de classificação. A solução para esse problema é para normalizar a 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 denominado normalização que retorna uma representação binária de um caractere quando é atribuído a qualquer um as equivalentes representações binárias do 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 uma representação binária diferente de uma seqüência de caracteres de entrada. No entanto, se duas seqüências são normalizadas no mesmo formulário de normalização, as seqüências de caracteres subseqüentemente podem ser comparadas usando uma comparação ordinal de (diferencia maiúsculas de minúsculas).

Uma comparação ordinal de duas seqüências de caracteres é uma comparação binária entre o valor numérico ou um ponto de código, de cada par correspondente de Char estruturas nos dois String objetos que representam seqüências normalizado. A.NET Framework fornece vários métodos que podem executar uma comparação ordinal.

Seu aplicativo pode usar o seguinte processo para normalizar e seqüências de caracteres de classificação:

  1. Obtenha as duas seqüências de caracteres a serem classificados a partir de uma fonte de entrada, como um arquivo ou entrada do usuário.

  2. Use o String.Normalize() método para normalizar as duas seqüências de caracteres para o 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, como o Compare(String, Int32, String, Int32, Int32, StringComparison) método com um Ordinal ou OrdinalIgnoreCase valor, para comparar duas seqüências de caracteres. A operação de comparação determina se a primeira seqüência lexicalmente precede o segundo ou as duas strings lexicalmente iguais.

  4. Emita as seqüências de caracteres da 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 atinge a ordem crescente ou decrescente.

    Se as seqüências forem iguais, uma seqüência de caracteres pode ser emitida pela primeira vez da menos que seja apropriado organizar as seqüências de caracteres com base em alguma característica diferente da 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 gravar nomes de arquivo igual na ordem de suas datas de criação do arquivo.

  5. Repita esse processo até que toda a entrada está classificada.

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

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

Consulte também

Conceitos

Classificação com culturas

Comparar e classificar dados para uma cultura específica

Outros recursos

Codificação e localização