Ler em inglês

Partilhar via


String.Normalize Método

Definição

Retorna uma nova cadeia de caracteres cuja representação binária está em um formulário de normalização Unicode específico.

Sobrecargas

Normalize()

Retorna uma nova cadeia de caracteres cujo valor textual é o mesmo que essa cadeia de caracteres, mas cuja representação binária está no formato de normalização C Unicode.

Normalize(NormalizationForm)

Retorna uma nova cadeia de caracteres cujo valor textual é o mesmo que essa cadeia de caracteres, mas cuja representação binária está no formato de normalização Unicode especificado.

Exemplos

O exemplo a seguir normaliza uma cadeia de caracteres para cada uma das quatro formas de normalização, confirma que a cadeia de caracteres foi normalizada para o formulário de normalização especificado e lista os pontos de código na cadeia de caracteres normalizada.

using System;
using System.Text;

class Example
{
    public static void Main()
    {
       // Character c; combining characters acute and cedilla; character 3/4
       string s1 = new String( new char[] {'\u0063', '\u0301', '\u0327', '\u00BE'});
       string s2 = null;
       string divider = new String('-', 80);
       divider = String.Concat(Environment.NewLine, divider, Environment.NewLine);

       Show("s1", s1);
       Console.WriteLine();
       Console.WriteLine("U+0063 = LATIN SMALL LETTER C");
       Console.WriteLine("U+0301 = COMBINING ACUTE ACCENT");
       Console.WriteLine("U+0327 = COMBINING CEDILLA");
       Console.WriteLine("U+00BE = VULGAR FRACTION THREE QUARTERS");
       Console.WriteLine(divider);

       Console.WriteLine("A1) Is s1 normalized to the default form (Form C)?: {0}",
                                    s1.IsNormalized());
       Console.WriteLine("A2) Is s1 normalized to Form C?:  {0}",
                                    s1.IsNormalized(NormalizationForm.FormC));
       Console.WriteLine("A3) Is s1 normalized to Form D?:  {0}",
                                    s1.IsNormalized(NormalizationForm.FormD));
       Console.WriteLine("A4) Is s1 normalized to Form KC?: {0}",
                                    s1.IsNormalized(NormalizationForm.FormKC));
       Console.WriteLine("A5) Is s1 normalized to Form KD?: {0}",
                                    s1.IsNormalized(NormalizationForm.FormKD));

       Console.WriteLine(divider);

       Console.WriteLine("Set string s2 to each normalized form of string s1.");
       Console.WriteLine();
       Console.WriteLine("U+1E09 = LATIN SMALL LETTER C WITH CEDILLA AND ACUTE");
       Console.WriteLine("U+0033 = DIGIT THREE");
       Console.WriteLine("U+2044 = FRACTION SLASH");
       Console.WriteLine("U+0034 = DIGIT FOUR");
       Console.WriteLine(divider);

       s2 = s1.Normalize();
       Console.Write("B1) Is s2 normalized to the default form (Form C)?: ");
       Console.WriteLine(s2.IsNormalized());
       Show("s2", s2);
       Console.WriteLine();

       s2 = s1.Normalize(NormalizationForm.FormC);
       Console.Write("B2) Is s2 normalized to Form C?: ");
       Console.WriteLine(s2.IsNormalized(NormalizationForm.FormC));
       Show("s2", s2);
       Console.WriteLine();

       s2 = s1.Normalize(NormalizationForm.FormD);
       Console.Write("B3) Is s2 normalized to Form D?: ");
       Console.WriteLine(s2.IsNormalized(NormalizationForm.FormD));
       Show("s2", s2);
       Console.WriteLine();

       s2 = s1.Normalize(NormalizationForm.FormKC);
       Console.Write("B4) Is s2 normalized to Form KC?: ");
       Console.WriteLine(s2.IsNormalized(NormalizationForm.FormKC));
       Show("s2", s2);
       Console.WriteLine();

       s2 = s1.Normalize(NormalizationForm.FormKD);
       Console.Write("B5) Is s2 normalized to Form KD?: ");
       Console.WriteLine(s2.IsNormalized(NormalizationForm.FormKD));
       Show("s2", s2);
       Console.WriteLine();
    }

    private static void Show(string title, string s)
    {
       Console.Write("Characters in string {0} = ", title);
       foreach(short x in s) {
           Console.Write("{0:X4} ", x);
       }
       Console.WriteLine();
    }
}
/*
This example produces the following results:

Characters in string s1 = 0063 0301 0327 00BE

U+0063 = LATIN SMALL LETTER C
U+0301 = COMBINING ACUTE ACCENT
U+0327 = COMBINING CEDILLA
U+00BE = VULGAR FRACTION THREE QUARTERS

--------------------------------------------------------------------------------

A1) Is s1 normalized to the default form (Form C)?: False
A2) Is s1 normalized to Form C?:  False
A3) Is s1 normalized to Form D?:  False
A4) Is s1 normalized to Form KC?: False
A5) Is s1 normalized to Form KD?: False

--------------------------------------------------------------------------------

Set string s2 to each normalized form of string s1.

U+1E09 = LATIN SMALL LETTER C WITH CEDILLA AND ACUTE
U+0033 = DIGIT THREE
U+2044 = FRACTION SLASH
U+0034 = DIGIT FOUR

--------------------------------------------------------------------------------

B1) Is s2 normalized to the default form (Form C)?: True
Characters in string s2 = 1E09 00BE

B2) Is s2 normalized to Form C?: True
Characters in string s2 = 1E09 00BE

B3) Is s2 normalized to Form D?: True
Characters in string s2 = 0063 0327 0301 00BE

B4) Is s2 normalized to Form KC?: True
Characters in string s2 = 1E09 0033 2044 0034

B5) Is s2 normalized to Form KD?: True
Characters in string s2 = 0063 0327 0301 0033 2044 0034

*/

Normalize()

Origem:
String.cs
Origem:
String.cs
Origem:
String.cs

Retorna uma nova cadeia de caracteres cujo valor textual é o mesmo que essa cadeia de caracteres, mas cuja representação binária está no formato de normalização C Unicode.

public string Normalize ();

Retornos

Uma nova cadeia de caracteres normalizada cujo valor textual é igual a essa cadeia de caracteres, mas cuja representação binária está no formato de normalização C.

Exceções

A instância atual contém caracteres Unicode inválidos.

Comentários

Alguns caracteres Unicode têm várias representações binárias equivalentes que consistem em conjuntos de combinação e/ou de caracteres Unicode compostos. Por exemplo, qualquer um dos seguintes pontos de código pode representar a letra "ắ":

  • U+1EAF

  • U+0103 U+0301

  • U+0061 U+0306 U+0301

A existência de várias representações para um único caractere complica a pesquisa, a classificação, a correspondência e outras operações.

O padrão Unicode define um processo chamado normalização que retorna uma representação binária quando recebe qualquer uma das representações binárias equivalentes de um caractere. A normalização pode ser realizada com vários algoritmos, chamados de formulários de normalização, que obedecem regras diferentes. O .NET dá suporte aos quatro formulários de normalização (C, D, KC e KD) definidos pelo padrão Unicode. Quando duas cadeias de caracteres são representadas na mesma forma de normalização, elas podem ser comparadas usando a comparação ordinal.

Para normalizar e comparar duas cadeias de caracteres, faça o seguinte:

  1. Obtenha as cadeias de caracteres a serem comparadas de uma fonte de entrada, como um arquivo ou um dispositivo de entrada do usuário.

  2. Chame o Normalize() método para normalizar as cadeias de caracteres para a forma de normalização C.

  3. Para comparar duas cadeias de caracteres, chame um método que dê suporte à comparação de cadeia de caracteres ordinal, como o Compare(String, String, StringComparison) método, e forneça um valor de StringComparison.Ordinal ou StringComparison.OrdinalIgnoreCase como o StringComparison argumento . Para classificar uma matriz de cadeias de caracteres normalizadas, passe um comparer valor de StringComparer.Ordinal ou StringComparer.OrdinalIgnoreCase para uma sobrecarga apropriada de Array.Sort.

  4. Emita as cadeias de caracteres na saída classificada com base na ordem indicada pela etapa anterior.

Para obter uma descrição dos formulários de normalização Unicode suportados, consulte System.Text.NormalizationForm.

Notas aos Chamadores

O método IsNormalized retorna false assim que encontra o primeiro caractere não normalizado em uma cadeia de caracteres. Portanto, se uma cadeia de caracteres contiver caracteres não normalizados seguidos por caracteres Unicode inválidos, o Normalize método gerará um ArgumentException embora IsNormalized retorne false.

Confira também

Aplica-se a

.NET 9 e outras versões
Produto Versões
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1

Normalize(NormalizationForm)

Origem:
String.cs
Origem:
String.cs
Origem:
String.cs

Retorna uma nova cadeia de caracteres cujo valor textual é o mesmo que essa cadeia de caracteres, mas cuja representação binária está no formato de normalização Unicode especificado.

public string Normalize (System.Text.NormalizationForm normalizationForm);

Parâmetros

normalizationForm
NormalizationForm

Um formato de normalização Unicode.

Retornos

Uma nova cadeia de caracteres cujo valor textual é igual a essa cadeia de caracteres, mas cuja representação binária está no formato de normalização especificado pelo parâmetro normalizationForm.

Exceções

A instância atual contém caracteres Unicode inválidos.

Comentários

Alguns caracteres Unicode têm várias representações binárias equivalentes que consistem em conjuntos de combinação e/ou de caracteres Unicode compostos. A existência de várias representações para um único caractere complica a pesquisa, a classificação, a correspondência e outras operações.

O padrão Unicode define um processo chamado normalização que retorna uma representação binária quando recebe qualquer uma das representações binárias equivalentes de um caractere. A normalização pode ser realizada com vários algoritmos, chamados de formulários de normalização, que obedecem regras diferentes. O .NET dá suporte aos quatro formulários de normalização (C, D, KC e KD) definidos pelo padrão Unicode. Quando duas cadeias de caracteres são representadas na mesma forma de normalização, elas podem ser comparadas usando a comparação ordinal.

Para normalizar e comparar duas cadeias de caracteres, faça o seguinte:

  1. Obtenha as cadeias de caracteres a serem comparadas de uma fonte de entrada, como um arquivo ou um dispositivo de entrada do usuário.

  2. Chame o Normalize(NormalizationForm) método para normalizar as cadeias de caracteres para um formulário de normalização especificado.

  3. Para comparar duas cadeias de caracteres, chame um método que dê suporte à comparação de cadeia de caracteres ordinal, como o Compare(String, String, StringComparison) método, e forneça um valor de StringComparison.Ordinal ou StringComparison.OrdinalIgnoreCase como o StringComparison argumento . Para classificar uma matriz de cadeias de caracteres normalizadas, passe um comparer valor de StringComparer.Ordinal ou StringComparer.OrdinalIgnoreCase para uma sobrecarga apropriada de Array.Sort.

  4. Emita as cadeias de caracteres na saída classificada com base na ordem indicada pela etapa anterior.

Para obter uma descrição dos formulários de normalização Unicode suportados, consulte System.Text.NormalizationForm.

Notas aos Chamadores

O método IsNormalized retorna false assim que encontra o primeiro caractere não normalizado em uma cadeia de caracteres. Portanto, se uma cadeia de caracteres contiver caracteres não normalizados seguidos por caracteres Unicode inválidos, o Normalize método poderá gerar um ArgumentException embora IsNormalized retorne false.

Confira também

Aplica-se a

.NET 9 e outras versões
Produto Versões
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1