String.Normalize Método
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Devolve uma nova cadeia cuja representação binária está numa determinada forma de normalização Unicode.
Sobrecargas
| Name | Description |
|---|---|
| Normalize() |
Devolve uma nova cadeia cujo valor textual é o mesmo que essa cadeia, mas cuja representação binária está na forma de normalização Unicode C. |
| Normalize(NormalizationForm) |
Devolve uma nova cadeia cujo valor textual é o mesmo que essa cadeia, mas cuja representação binária está na forma especificada de normalização Unicode. |
Exemplos
O exemplo seguinte normaliza uma cadeia para cada uma das quatro formas de normalização, confirma que a cadeia foi normalizada para a forma de normalização especificada, e depois lista os pontos de código na cadeia 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
*/
open System
open System.Text
let show title (s: string) =
printf $"Characters in string %s{title} = "
for x in s do
printf $"{int16 x:X4} "
printfn ""
[<EntryPoint>]
let main _ =
// Character c; combining characters acute and cedilla; character 3/4
let s1 = String [| '\u0063'; '\u0301'; '\u0327'; '\u00BE' |]
let divider = String('-', 80)
let divider = String.Concat(Environment.NewLine, divider, Environment.NewLine)
show "s1" s1
printfn "\nU+0063 = LATIN SMALL LETTER C"
printfn "U+0301 = COMBINING ACUTE ACCENT"
printfn "U+0327 = COMBINING CEDILLA"
printfn "U+00BE = VULGAR FRACTION THREE QUARTERS"
printfn $"{divider}"
printfn $"A1) Is s1 normalized to the default form (Form C)?: {s1.IsNormalized()}"
printfn $"A2) Is s1 normalized to Form C?: {s1.IsNormalized NormalizationForm.FormC}"
printfn $"A3) Is s1 normalized to Form D?: {s1.IsNormalized NormalizationForm.FormD}"
printfn $"A4) Is s1 normalized to Form KC?: {s1.IsNormalized NormalizationForm.FormKC}"
printfn $"A5) Is s1 normalized to Form KD?: {s1.IsNormalized NormalizationForm.FormKD}"
printfn $"{divider}"
printfn "Set string s2 to each normalized form of string s1.\n"
printfn "U+1E09 = LATIN SMALL LETTER C WITH CEDILLA AND ACUTE"
printfn"U+0033 = DIGIT THREE"
printfn"U+2044 = FRACTION SLASH"
printfn"U+0034 = DIGIT FOUR"
printfn $"{divider}"
let s2 = s1.Normalize()
printf "B1) Is s2 normalized to the default form (Form C)?: "
printfn $"{s2.IsNormalized()}"
show "s2" s2
printfn ""
let s2 = s1.Normalize NormalizationForm.FormC
printf "B2) Is s2 normalized to Form C?: "
printfn $"{s2.IsNormalized NormalizationForm.FormC}"
show "s2" s2
printfn ""
let s2 = s1.Normalize NormalizationForm.FormD
printf "B3) Is s2 normalized to Form D?: "
printfn $"{s2.IsNormalized NormalizationForm.FormD}"
show "s2" s2
printfn ""
let s2 = s1.Normalize(NormalizationForm.FormKC)
printf "B4) Is s2 normalized to Form KC?: "
printfn $"{s2.IsNormalized NormalizationForm.FormKC}"
show "s2" s2
printfn ""
let s2 = s1.Normalize(NormalizationForm.FormKD)
printf "B5) Is s2 normalized to Form KD?: "
printfn $"{s2.IsNormalized NormalizationForm.FormKD}"
show "s2" s2
0
(*
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
*)
Imports System.Text
Class Example
Public Shared Sub Main()
' Character c; combining characters acute and cedilla; character 3/4
Dim s1 = New [String](New Char() {ChrW(&H0063), ChrW(&H0301), ChrW(&H0327), ChrW(&H00BE)})
Dim s2 As String = Nothing
Dim divider = New [String]("-"c, 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()
End Sub
Private Shared Sub Show(title As String, s As String)
Console.Write("Characters in string {0} = ", title)
For Each x As Char In s
Console.Write("{0:X4} ", AscW(x))
Next
Console.WriteLine()
End Sub
End Class
'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()
Devolve uma nova cadeia cujo valor textual é o mesmo que essa cadeia, mas cuja representação binária está na forma de normalização Unicode C.
public:
System::String ^ Normalize();
public string Normalize();
member this.Normalize : unit -> string
Public Function Normalize () As String
Devoluções
Uma nova cadeia normalizada cujo valor textual é igual a esta cadeia, mas cuja representação binária está em forma de normalização C.
Exceções
A instância atual contém caracteres Unicode inválidos.
Observações
Alguns caracteres Unicode têm múltiplas representações binárias equivalentes consistindo em conjuntos de caracteres Unicode combinados e/ou 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 múltiplas representações para um único carácter complica a pesquisa, ordenação, 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 carácter. A normalização pode ser realizada com vários algoritmos, chamados formas de normalização, que obedecem a diferentes regras. O .NET suporta as quatro formas de normalização (C, D, KC e KD) definidas pelo padrão Unicode. Quando duas cadeias são representadas na mesma forma de normalização, podem ser comparadas usando comparação ordinal.
Para normalizar e comparar duas cadeias, faça o seguinte:
Obtenha as cadeias a comparar a partir de uma fonte de entrada, como um ficheiro ou um dispositivo de entrada do utilizador.
Chame o Normalize() método para normalizar as cadeias para a forma de normalização C.
Para comparar duas cadeias, chame um método que suporte a comparação ordinal de cadeias, como o Compare(String, String, StringComparison) método, e forneça um valor de StringComparison.Ordinal ou StringComparison.OrdinalIgnoreCase como StringComparison argumento. Para ordenar um array de cadeias normalizadas, passa um
comparervalor de StringComparer.Ordinal ou StringComparer.OrdinalIgnoreCase para uma sobrecarga apropriada de Array.Sort.Emita as strings na saída ordenada com base na ordem indicada pelo passo anterior.
Para uma descrição das formas de normalização Unicode suportadas, veja System.Text.NormalizationForm.
Notas para Chamadores
O IsNormalized método retorna false assim que encontra o primeiro carácter não normalizado numa cadeia. Portanto, se uma cadeia contiver caracteres não normalizados seguidos de caracteres Unicode inválidos, o Normalize método lançará um ArgumentException while IsNormalized retorna false.
Ver também
Aplica-se a
Normalize(NormalizationForm)
Devolve uma nova cadeia cujo valor textual é o mesmo que essa cadeia, mas cuja representação binária está na forma especificada de normalização Unicode.
public:
System::String ^ Normalize(System::Text::NormalizationForm normalizationForm);
public string Normalize(System.Text.NormalizationForm normalizationForm);
member this.Normalize : System.Text.NormalizationForm -> string
Public Function Normalize (normalizationForm As NormalizationForm) As String
Parâmetros
- normalizationForm
- NormalizationForm
Um formulário de normalização Unicode.
Devoluções
Uma nova cadeia cujo valor textual é o mesmo que essa cadeia, mas cuja representação binária está na forma de normalização especificada pelo normalizationForm parâmetro.
Exceções
A instância atual contém caracteres Unicode inválidos.
Observações
Alguns caracteres Unicode têm múltiplas representações binárias equivalentes consistindo em conjuntos de caracteres Unicode combinados e/ou compostos. A existência de múltiplas representações para um único carácter complica a pesquisa, ordenação, 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 carácter. A normalização pode ser realizada com vários algoritmos, chamados formas de normalização, que obedecem a diferentes regras. O .NET suporta as quatro formas de normalização (C, D, KC e KD) definidas pelo padrão Unicode. Quando duas cadeias são representadas na mesma forma de normalização, podem ser comparadas usando comparação ordinal.
Para normalizar e comparar duas cadeias, faça o seguinte:
Obtenha as cadeias a comparar a partir de uma fonte de entrada, como um ficheiro ou um dispositivo de entrada do utilizador.
Chame o Normalize(NormalizationForm) método para normalizar as cadeias numa forma de normalização especificada.
Para comparar duas cadeias, chame um método que suporte a comparação ordinal de cadeias, como o Compare(String, String, StringComparison) método, e forneça um valor de StringComparison.Ordinal ou StringComparison.OrdinalIgnoreCase como StringComparison argumento. Para ordenar um array de cadeias normalizadas, passa um
comparervalor de StringComparer.Ordinal ou StringComparer.OrdinalIgnoreCase para uma sobrecarga apropriada de Array.Sort.Emita as strings na saída ordenada com base na ordem indicada pelo passo anterior.
Para uma descrição das formas de normalização Unicode suportadas, veja System.Text.NormalizationForm.
Notas para Chamadores
O IsNormalized método retorna false assim que encontra o primeiro carácter não normalizado numa cadeia. Portanto, se uma cadeia contiver caracteres não normalizados seguidos de caracteres Unicode inválidos, o Normalize método pode lançar um ArgumentException while IsNormalized retorna false.